php html image variables src

Obtenga img src con PHP



html image (7)

Lo he hecho de la manera más simple, no tan limpia como debería pero fue un truco rápido

$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);

Me gustaría obtener el atributo SRC en una variable en este ejemplo:

<img border="0" src="/images/image.jpg" alt="Image" width="100" height="100" />

Entonces, por ejemplo, me gustaría obtener una variable $foo = "/images/image.jpg" . ¡Importante! El atributo src será dinámico , por lo que no debe estar codificado. ¿Hay alguna manera rápida y fácil de hacer esto?

¡Gracias!

EDITAR: la imagen formará parte de una enorme cadena que es básicamente el contenido de una noticia. Entonces la imagen es solo una parte de eso.

EDIT2: Habrá más imágenes en esta cadena, y solo querría obtener el src de la primera. es posible?


Podría haber dos soluciones fáciles:

  1. HTML es un xml por lo que puede usar cualquier método de análisis XML si carga la etiqueta como XML y obtiene su atributo de forma tottalmente dinámica incluso el atributo de datos dom (como data-time o cualquier cosa) .....
  2. Utilice cualquier analizador html para php como http://mbe.ro/2009/06/21/php-html-to-array-working-one/ o php parse html para array Google esto

Sé que la gente dice que no debes usar expresiones regulares para analizar HTML, pero en este caso me parece perfectamente correcto.

$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);


Sería mejor utilizar un analizador DOM para este tipo de análisis de HTML. Considera este código:

$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

SALIDA:

src=/images/image.jpg


Use un analizador HTML como DOMDocument y luego evalúe el valor que está buscando con 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"

O para aquellos que realmente necesitan ahorrar espacio:

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

Y para los de una sola línea:

$src = (string) reset(simplexml_import_dom(DOMDocument::loadHTML($html))->xpath("//img/@src"));


$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];

DEMO

NOTA: Debe usar un analizador HTML como DOMDocument y NO una expresión regular.


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

Se pueden usar otras expresiones regulares para determinar si la etiqueta src extraída es una imagen como esta:

if(preg_match(''/([jpg]{3}$)|([gif]{3}$)|([jpeg]{3}$)|([bmp]{3}$)|([png]{3}$)/'', $src) == 1) { //its an image }