Avatar billede fatal85 Nybegynder
05. september 2009 - 12:52 Der er 10 kommentarer

få info ud af et htmldokument?

Det er forholdsvist nemt, at få xml oplysninger ud af et xmldokument vha. php.
Men er det muligt, at få information ud af et html dokument også? Og hvis ja hvordan?
Helt specifikt vil jeg gerne have indholdet af ahref inde i et link.
Avatar billede coderdk Praktikant
05. september 2009 - 14:45 #1
F.eks.:

$url = "http://pryl.feber.se";
$cnt = file_get_contents( "http://pryl.feber.se/" );
if ( preg_match_all( "/<a.*?href=['\"](.*?)['\"]/", $cnt, $m ) )
{
    foreach ( $m[1] as $link )
    {
        if ( substr( $link, 0, 5 ) != 'http:' )
        {
            $link = $url . ( $link[0] != '/' ? '/' : '' ) . $link;
        }
        echo '<div><a href="'.$link.'">'.$link.'</a></div>';
    }
}
Avatar billede fatal85 Nybegynder
05. september 2009 - 15:14 #2
hmm sådan som jeg læser din kode, så laver den en liste over alle linksene på en side.
Hvilke muligheder ville man have for, at kunne hente indholdet af et helt bestemt link på siden?
Avatar billede coderdk Praktikant
05. september 2009 - 15:15 #3
Du kan se på det omkringliggende kode, og så lave en regex der hiver det link ud du er ude efter.
Avatar billede fatal85 Nybegynder
05. september 2009 - 15:17 #4
I det eksempel du bruger http://pryl.feber.se/ er der følgende links på samme linje i kildekoden. Hvad hvis jeg ville have indholdet af link nr 2?

<a href="http://pryl.feber.se/tag/jDome">jDome</a>, <a href="http://pryl.feber.se/tag/Bakprojektion">Bakprojektion</a>, <a href="http://pryl.feber.se/tag/Spela">Spela</a>
Avatar billede coderdk Praktikant
05. september 2009 - 15:21 #5
Link nummer to er $m[1][1] ;)
Avatar billede coderdk Praktikant
05. september 2009 - 15:22 #6
(og link nummer tre $m[1][2], fire $m[1][3] osv)
Avatar billede fatal85 Nybegynder
05. september 2009 - 15:36 #7
altså bare lige for at forstå det rigtig, så erstatter jeg de eksempler der, med koden du lavede i dit første indlæg.
Sorry jeg er ikke så god til php :)
Avatar billede fatal85 Nybegynder
05. september 2009 - 15:38 #8
hvis jeg kun ville have link nr 2, så ville det sådan her ud?

$url = "http://pryl.feber.se";
$cnt = file_get_contents( "http://pryl.feber.se/" );
if ( preg_match_all( "/<a.*?href=['\"](.*?)['\"]/", $cnt, $m ) )
{
    foreach ( $m[1][1] as $link )
    {
        if ( substr( $link, 0, 5 ) != 'http:' )
        {
            $link = $url . ( $link[0] != '/' ? '/' : '' ) . $link;
        }
        echo '<div><a href="'.$link.'">'.$link.'</a></div>';
    }
}
Avatar billede fatal85 Nybegynder
05. september 2009 - 17:20 #9
ok, har lige prøver mig frem.
Når jeg erstatter hele "foreach" med

echo "$m[1]";

så står urlen der ikke, men så står der bare "Array"

og hvis jeg erstatter den med

echo ""$m[1][1];

står der "Array[1]"

Nogen ide om hvad der kan være galt?
Avatar billede fatal85 Nybegynder
05. september 2009 - 17:23 #10
ok, fandt selv ud af det erstattede preg_match_all med preg_match og så virkede det.

coderdk, opretter du et svar, så jeg kan give dig pointene?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester