Je voudrais obtenir l'attribut SRC dans une variable dans cet exemple:
<img border="0" src="/images/image.jpg" alt="Image" width="100" height="100" />
Ainsi, par exemple, j'aimerais obtenir une variable $foo = "/images/image.jpg"
. Important! L'attribut src sera dynamic, il ne doit donc pas être codé en dur. Y at-il un moyen rapide et facile de faire cela?
Merci!
EDIT: L'image fera partie d'une énorme chaîne qui est essentiellement le contenu d'un reportage. Donc, l'image n'est qu'une partie de cela.
EDIT2: Il y aura plus d'images dans cette chaîne, et je voudrais seulement obtenir le src du premier. Est-ce possible?
Utilisez un analyseur HTML tel que DOMDocument
puis évaluez la valeur que vous recherchez avec DOMXpath
:
$html = '<img id="12" border="0" src="/images/image.jpg"
alt="Image" width="100" height="100" />';
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$src = $xpath->evaluate("string(//img/@src)"); # "/images/image.jpg"
Ou pour ceux qui ont vraiment besoin de gagner de la place:
$xpath = new DOMXPath(@DOMDocument::loadHTML($html));
$src = $xpath->evaluate("string(//img/@src)");
Et pour les one-liners:
$src = (string) reset(simplexml_import_dom(DOMDocument::loadHTML($html))->xpath("//img/@src"));
Vous feriez mieux d'utiliser un analyseur DOM pour ce type d'analyse HTML. Considérons ce code:
$html = '<img id="12" border="0" src="/images/image.jpg"
alt="Image" width="100" height="100" />';
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($html); // loads your html
$xpath = new DOMXPath($doc);
$nodelist = $xpath->query("//img"); // find your image
$node = $nodelist->item(0); // gets the 1st image
$value = $node->attributes->getNamedItem('src')->nodeValue;
echo "src=$value\n"; // prints src of image
OUTPUT:
src=/images/image.jpg
Je l'ai fait de la manière la plus simple, pas aussi propre qu'il devrait l'être, mais c'était un hack rapide
$htmlContent = file_get_contents('pageURL');
// read all image tags into an array
preg_match_all('/<img[^>]+>/i',$htmlContent, $imgTags);
for ($i = 0; $i < count($imgTags[0]); $i++) {
// get the source string
preg_match('/src="([^"]+)/i',$imgTags[0][$i], $imgage);
// remove opening 'src=' tag, can`t get the regex right
$origImageSrc[] = str_ireplace( 'src="', '', $imgage[0]);
}
// will output all your img src's within the html string
print_r($origImageSrc);
Je sais que les gens disent que vous ne devriez pas utiliser d'expressions régulières pour analyser le code HTML, mais dans ce cas, je le trouve parfaitement correct.
$string = '<img border="0" src="/images/image.jpg" alt="Image" width="100" height="100" />';
preg_match('/<img(.*)src(.*)=(.*)"(.*)"/U', $string, $result);
$foo = array_pop($result);
$imgTag = <<< LOB
<img border="0" src="/images/image.jpg" alt="Image" width="100" height="100" />
<img border="0" src="/images/not_match_image.jpg" alt="Image" width="100" height="100" />
LOB;
preg_match('%<img.*?src=["\'](.*?)["\'].*?/>%i', $imgTag, $matches);
$imgSrc = $matches[1];
NOTE: Vous devez utiliser un analyseur HTML tel que DOMDocument
et [~ # ~] non [ ~ # ~] une regex.
$str = '<img border="0" src=\'/images/image.jpg\' alt="Image" width="100" height="100"/>';
preg_match('/(src=["\'](.*?)["\'])/', $str, $match); //find src="X" or src='X'
$split = preg_split('/["\']/', $match[0]); // split by quotes
$src = $split[1]; // X between quotes
echo $src;
D'autres expressions rationnelles peuvent être utilisées pour déterminer si le tag src tiré est une image comme ceci:
if(preg_match('/([jpg]{3}$)|([gif]{3}$)|([jpeg]{3}$)|([bmp]{3}$)|([png]{3}$)/', $src) == 1) {
//its an image
}