11 Stimmen

Alle Bildurl aus String holen

Mögliches Duplikat:
Wie extrahiert man img src, title und alt aus html mit php?

Hallo,
Ich habe eine Lösung gefunden, um das erste Bild aus der Zeichenkette zu erhalten:

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

Aber es gelingt mir nicht, alle Bilder aus dem String zu bekommen.
Eine weitere Sache... Wenn das Bild alternativen Text enthält ( alt Attribut), wie kann man es auch erhalten und in einer anderen Variablen speichern?
Vielen Dank im Voraus,
Ilija

33voto

cletus Punkte 596503

Tun Sie dies nicht mit regulären Ausdrücken. Analysieren Sie stattdessen das HTML. Werfen Sie einen Blick auf Parsen von HTML mit PHP und DOM . Dies ist eine Standardfunktion in PHP 5.2.x (und wahrscheinlich früher). Grundsätzlich ist die Logik für das Abrufen von Bildern ungefähr:

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

Die Anpassung an das Auffinden von Bildern sollte trivial sein.

8voto

ilija veselica Punkte 9124

Dies ist, was ich versucht habe, aber nicht bekommen kann es 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: Ich habe dieses Problem gelöst

$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>";
    }

2voto

John Carter Punkte 52192

Beachten Sie, dass reguläre Ausdrücke ein schlechter Ansatz zum Parsen von allem sind, was passende geschweifte Klammern beinhaltet.

Besser wäre es, wenn Sie die DOMDocument Klasse.

0voto

Lars D Punkte 8302

Sie gehen davon aus, dass Sie HTML mit regulären Ausdrücken parsen können. Das mag für einige Websites funktionieren, aber nicht für alle. Da Sie sich nur auf eine Teilmenge aller Webseiten beschränken, wäre es interessant zu wissen, wie Sie sich selbst beschränken... vielleicht können Sie das HTML auf recht einfache Weise von php aus analysieren.

0voto

Per Östlund Punkte 1194

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X