Avec PHP, comment puis-je isoler le contenu de l'attribut src de $ foo? Le résultat final que je recherche me donnerait juste " http://example.com/img/image.jpg "
$foo = '<img class="foo bar test" title="test image" src="http://example.com/img/image.jpg" alt="test image" width="100" height="100" />';
Si vous ne souhaitez pas utiliser l'expression régulière (ou tout autre élément non standard PHP)), une solution raisonnable utilisant la fonction intégrée classe DOMDocument serait la suivante:
<?php
$doc = new DOMDocument();
$doc->loadHTML('<img src="http://example.com/img/image.jpg" ... />');
$imageTags = $doc->getElementsByTagName('img');
foreach($imageTags as $tag) {
echo $tag->getAttribute('src');
}
?>
<?php
$foo = '<img class="foo bar test" title="test image" src="http://example.com/img/image.jpg" alt="test image" width="100" height="100" />';
$array = array();
preg_match( '/src="([^"]*)"/i', $foo, $array ) ;
print_r( $array[1] ) ;
http://example.com/img/image.jpg
J'ai ce code:
$dom = new DOMDocument();
$dom->loadHTML($img);
echo $dom->getElementsByTagName('img')->item(0)->getAttribute('src');
En supposant qu'il n'y a qu'une seule img: P
// Create DOM from string
$html = str_get_html('<img class="foo bar test" title="test image" src="http://example.com/img/image.jpg" alt="test image" width="100" height="100" />');
// echo the src attribute
echo $html->find('img', 0)->src;
Je suis extrêmement en retard, mais j'ai une solution simple non encore mentionnée. Chargez-le avec simplexml_load_string
(si le simplexml est activé), puis feuilletez-le json_encode
et json_decode
.
$foo = '<img class="foo bar test" title="test image" src="http://example.com/img/image.jpg" alt="test image" width="100" height="100" />';
$parsedFoo = json_decode(json_encode(simplexml_load_string($foo)), true);
var_dump($parsedFoo['@attributes']['src']); // output: "http://example.com/img/image.jpg"
$parsedFoo
apparaît comme
array(1) {
["@attributes"]=>
array(6) {
["class"]=>
string(12) "foo bar test"
["title"]=>
string(10) "test image"
["src"]=>
string(32) "http://example.com/img/image.jpg"
["alt"]=>
string(10) "test image"
["width"]=>
string(3) "100"
["height"]=>
string(3) "100"
}
}
J'utilise cela pour analyser XML et HTML depuis quelques mois maintenant et cela fonctionne plutôt bien. Je n'ai pas encore eu de hoquet, même si je n'ai pas eu à analyser un gros fichier avec lui (j'imagine utiliser json_encode
et json_decode
comme ça va ralentir à mesure que l'entrée augmente). C'est compliqué, mais c'est de loin le moyen le plus simple de lire les propriétés HTML.
preg_match
résout bien ce problème.
Voir ma réponse ici: Comment extraire img src, title et alt de html en utilisant php?
essayez ce modèle:
'/< \s* img [^\>]* src \s* = \s* [\""\']? ( [^\""\'\s>]* )/'
Voici ce que j'ai fini par faire, bien que je ne sois pas sûr de son efficacité:
$imgsplit = explode('"',$data);
foreach ($imgsplit as $item) {
if (strpos($item, 'http') !== FALSE) {
$image = $item;
break;
}
}
Vous pouvez contourner ce problème en utilisant cette fonction:
fonction getTextBetween ($ start, $ end, $ text) { $ start_from = strpos ($ text, $ start); $ start_pos = $ start_from + strlen ($ start); $ end_pos = strpos ($ text, $ end, $ start_pos + 1); $ subtext = substr ($ text, $ start_pos, $ end_pos); renvoie $ subtext; }
$ foo = '<img class = "foo bar test" title = "test image" src = "http://example.com/img/image.jpg" alt = "test image " width =" 100 "height =" 100 "/> ';
$ img_src = getTextBetween ('src = "', '"', $ foo);