2009-10-03 9 views
8

Mögliche Duplizieren:
How to extract img src, title and alt from html using php?alle url Bilder von String Get

Hallo,
ich gefunden habe Lösung erstes Bild von String zu erhalten:

preg_match('~<img[^>]*src\s?=\s?[\'"]([^\'"]*)~i',$string, $matches); 

Aber ich kann nicht alle Bilder aus der Zeichenfolge abrufen.
Noch eine Sache ... Wenn Bild alternativen Text enthält (alt Attribut) Wie bekomme ich es auch und speichern auf eine andere Variable?
Vielen Dank im Voraus,
Ilija

+1

Siehe http://stackoverflow.com/questions/138313/how-to-extract-img-src-title-and-alt-von-html-using-php/138614 # 138614 – Gumbo

+0

'[^ >]' funktioniert nicht, wie ich vermute, dass Sie denken :) Es heißt eigentlich "alles was nicht ist &, g, t oder;", NICHT "nichts als die Zeichenfolge > ". Das heißt: parse mit DOM statt. – jensgram

Antwort

7

Dies ist, was ich versucht, aber es kann nicht drucken Wert von src

$dom = new domDocument; 

    /*** load the html into the object ***/ 
    $dom->loadHTML($html); 

    /*** discard white space ***/ 
    $dom->preserveWhiteSpace = false; 

    /*** the table by its tag name ***/ 
    $images = $dom->getElementsByTagName('img'); 

    /*** loop over the table rows ***/ 
    foreach ($images as $img) 
    { 
     /*** get each column by tag name ***/ 
     $url = $img->getElementsByTagName('src'); 
     /*** echo the values ***/ 
     echo $url->nodeValue; 
     echo '<hr />'; 
    } 

EDIT bekommen: Ich löste dieses Problem

$dom = new domDocument; 

/*** load the html into the object ***/ 
$dom->loadHTML($string); 

/*** discard white space ***/ 
$dom->preserveWhiteSpace = false; 

$images = $dom->getElementsByTagName('img'); 

foreach($images as $img) 
    { 
     $url = $img->getAttribute('src'); 
     $alt = $img->getAttribute('alt'); 
     echo "Title: $alt<br>$url<br>"; 
    } 
0

Sie gehen davon aus, dass Sie HTML mit regulären Ausdrücken analysieren kann. Das funktioniert möglicherweise für einige Sites, aber nicht für alle Sites. Da Sie sich auf nur eine Teilmenge aller Webseiten beschränken, wäre es interessant zu wissen, wie Sie sich selbst einschränken ... vielleicht können Sie den HTML-Code auf einfache Weise von PHP aus analysieren.

0

Sehen Sie sich preg_match_all an, um alle Übereinstimmungen zu erhalten.

32

Tun Sie dies nicht mit regulären Ausdrücken. Analysieren Sie stattdessen den HTML-Code. Werfen Sie einen Blick auf Parse HTML With PHP And DOM. Dies ist eine Standardfunktion in PHP 5.2.x (und wahrscheinlich früher). Grundsätzlich ist die Logik zum Abrufen von Bildern grob:

$dom = new domDocument; 
$dom->loadHTML($html); 
$dom->preserveWhiteSpace = false; 
$images = $dom->getElementsByTagName('img'); 
foreach ($images as $image) { 
    echo $image->getAttribute('src'); 
} 

Dies sollte trivial sein, um Bilder zu finden.

+0

Ja, das scheint die beste Lösung zu sein. –

+0

Hallo Cletus, Dies sieht sehr einfach und viel bessere Lösung als reguläre Ausdrücke. Trotzdem habe ich es nicht geschafft mit Bildern zu arbeiten. Gibt es einen anderen Link mit einer besseren Erklärung? Vielen Dank! –

+0

Ich liebe dich. Ich weiß total konstruktiven Kommentar;) – mark

2

Beachten Sie, dass reguläre Ausdrücke eine schlechte Methode zum Analysieren von allem sind, das Klammern betrifft.

Sie wären besser dran mit der DOMDocument Klasse.

+0

Heh, Cletus hat mich natürlich dazu geschlagen :) –