Obtenir img src avec PHP

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, - je voudrais obtenir une variable $foo = "/images/image.jpg". Important! L'attribut src sera dynamique , il ne doit donc pas être codé en dur. Y a-t-il un moyen rapide et facile de le faire?

Merci!

EDIT: L'image fera partie d'une énorme chaîne qui est essentiellement le contenu d'une nouvelle. Alors l'image est juste une partie de qui.

EDIT2: il y aura plus d'images dans ce string, et je voudrais seulement obtenir le src du premier. Est-ce possible?

46
demandé sur pangi 2012-04-12 23:58:23

7 réponses

Utilisez un analyseur HTML comme 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 d'économiser de l'espace:

$xpath = new DOMXPath(@DOMDocument::loadHTML($html));
$src = $xpath->evaluate("string(//img/@src)");

Et pour les one-liners là-bas:

$src = (string) reset(simplexml_import_dom(DOMDocument::loadHTML($html))->xpath("//img/@src"));
92
répondu hakre 2012-04-12 22:26:31

Vous feriez mieux d'utiliser un analyseur DOM pour ce type d'analyse HTML. Considérez 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

SORTIE:

src=/images/image.jpg
20
répondu anubhava 2012-04-12 20:09:15

Je l'ai fait au plus simple, pas aussi propre qu'il devrait être, mais c'était un rapide hack

$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);
13
répondu Torsten 2012-11-28 20:43:12

Je sais que les gens disent que vous ne devriez pas utiliser d'expressions régulières pour analyser le HTML, mais dans ce cas, je le trouve parfaitement bien.

$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);
9
répondu kba 2012-04-12 20:18:03
$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];

DÉMO


REMARQUE:, Vous devez utiliser un Analyseur HTML comme DOMDocument et PAS une regex.

4
répondu Pedro Lobito 2016-12-28 18:04:46
$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 la balise src tirée est une image comme ceci:

if(preg_match('/([jpg]{3}$)|([gif]{3}$)|([jpeg]{3}$)|([bmp]{3}$)|([png]{3}$)/', $src) == 1) {
//its an image
}
3
répondu squarephoenix 2012-04-12 20:43:40

Il pourrait y avoir deux solutions faciles:

  1. HTML lui-même est un xml donc vous pouvez utiliser N'importe quelle méthode D'analyse XML si vous chargez la balise en tant que XML et obtenez son attribut totalement dynamiquement même l'attribut de données dom (comme data-time ou quoi que ce soit).....
  2. Utiliser n'importe quel analyseur html pour php comme http://mbe.ro/2009/06/21/php-html-to-array-working-one/ ou php analyse html au tableau Google this
-1
répondu Jitendra 2014-01-21 23:27:38