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:
- 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) .....
- 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];
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
}