strip_tags - Consiguiendo la primera imagen en string con php.
substr php (4)
¿Estás seguro de que la expresión regular siempre coincide con la primera? Intenta imprimir la matriz cada vez que la llamas para ver:
error_log(var_export($matches, true));
Estoy tratando de obtener la primera imagen de cada uno de mis mensajes. Este código de abajo funciona muy bien si solo tengo una imagen. Pero si tengo más de una me da una imagen pero no siempre la primera.
Realmente solo quiero la primera imagen. Muchas veces la segunda imagen es el siguiente botón.
$texthtml = ''Who is Sara Bareilles on Sing Off<br>
<img alt="Sara" title="Sara" src="475993565.jpg"/><br>
<img alt="Sara" title="Sara two" src="475993434343434.jpg"/><br>'';
preg_match_all(''/<img.+src=[/'"]([^/'"]+)[/'"].*>/i'', $texthtml, $matches);
$first_img = $matches [1] [0];
ahora puedo tomar este "$ first_img" y pegarlo frente a la breve descripción
<img alt="Sara" title="Sara" src="<?php echo $first_img;?>"/>
Después de probar una respuesta desde aquí ¿ Usar expresiones regulares para extraer la primera fuente de imagen de los códigos html? Obtuve mejores resultados con menos imágenes de enlaces rotos que la respuesta proporcionada aquí.
Si bien las expresiones regulares pueden ser buenas para una gran variedad de tareas, me parece que generalmente se quedan cortas al analizar HTML DOM. El problema con HTML es que la estructura de su documento es tan variable que es difícil de extraer con precisión (y con precisión quiero decir 100% de éxito sin falsos positivos) extraer una etiqueta.
Para obtener resultados más consistentes, use este objeto http://simplehtmldom.sourceforge.net/ que le permite manipular html. Se proporciona un ejemplo en la respuesta en el primer enlace que publiqué.
function get_first_image($html){
require_once(''SimpleHTML.class.php'')
$post_html = str_get_html($html);
$first_img = $post_html->find(''img'', 0);
if($first_img !== null) {
return $first_img->src'';
}
return null;
}
Disfrutar
No utilice expresiones regulares para analizar html. Utilice una lib / parsing lib / class, como phpquery:
require ''phpQuery-onefile.php'';
$texthtml = ''Who is Sara Bareilles on Sing Off<br>
<img alt="Sarahehe" title="Saraxd" src="475993565.jpg"/><br>
<img alt="Sara" title="Sara two" src="475993434343434.jpg"/><br>'';
$pq = phpQuery::newDocumentHTML($texthtml);
$img = $pq->find(''img:first'');
$src = $img->attr(''src'');
echo "<img alt=''foo'' title=''baa'' src=''{$src}''>";
Descargar: http://code.google.com/p/phpquery/
Si solo necesita la primera etiqueta de origen, preg_match
debería hacer en lugar de preg_match_all
, ¿esto funciona para usted?
<?php
$texthtml = ''Who is Sara Bareilles on Sing Off<br>
<img alt="Sara" title="Sara" src="475993565.jpg"/><br>
<img alt="Sara" title="Sara two" src="475993434343434.jpg"/><br>'';
preg_match(''/<img.+src=[/'"](?P<src>.+?)[/'"].*>/i'', $texthtml, $image);
echo $image[''src''];
?>