web-dev-qa-db-fra.com

Obtenir la première image en chaîne avec php

J'essaie d'obtenir la première image de chacun de mes messages. Ce code ci-dessous fonctionne très bien si je n'ai qu'une seule image. Mais si j'en ai plus d'une, cela me donne une image mais pas toujours la première.

Je ne veux vraiment que la première image. Souvent, la deuxième image est un bouton suivant

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

maintenant je peux prendre ce "$ first_img" et le coller devant la courte description

<img alt="Sara" title="Sara" src="<?php echo $first_img;?>"/>
26
MHowey

Si vous n'avez besoin que de la première balise source, preg_match devrait faire au lieu de preg_match_all, Est-ce que ça marche pour toi?

<?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'];
?>
43
derp

N'utilisez pas regex pour analyser le html. Utilisez une bibliothèque/classe d'analyse html, comme 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}'>";

Télécharger: http://code.google.com/p/phpquery/

5
The Mask

Après avoir testé une réponse d'ici tiliser des expressions régulières pour extraire la première source d'image des codes html? J'ai obtenu de meilleurs résultats avec des images de liens moins brisées que la réponse fournie ici.

Alors que les expressions régulières peuvent être bonnes pour une grande variété de tâches, je trouve que cela échoue généralement lors de l'analyse du DOM HTML. Le problème avec HTML est que la structure de votre document est si variable qu'il est difficile d'extraire avec précision (et j'entends par là avec précision un taux de réussite de 100% sans faux positif) une balise.

Pour des résultats plus cohérents, utilisez cet objet http://simplehtmldom.sourceforge.net/ qui vous permet de manipuler du HTML. Un exemple est fourni dans la réponse du premier lien que j'ai publié.

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

Prendre plaisir

4

Êtes-vous sûr que l'expression régulière correspond toujours à la première? Essayez d'imprimer la matrice à chaque appel pour voir:

error_log(var_export($matches, true));

1
Sky Kelsey