Получение первого изображения в строке с помощью php - PullRequest
26 голосов
/ 20 сентября 2011

Я пытаюсь получить первое изображение из каждого из моих постов. Этот код ниже прекрасно работает, если у меня есть только одно изображение. Но если у меня есть больше одного, это дает мне изображение, но не всегда первое.

Я действительно хочу только первое изображение. Много раз второе изображение является следующей кнопкой

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

теперь я могу взять этот "$ first_img" и вставить его перед кратким описанием

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

Ответы [ 4 ]

43 голосов
/ 20 сентября 2011

Если вам нужен только первый исходный тег, preg_match должен сделать вместо preg_match_all, это работает для вас?

<?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'];
?>
5 голосов
/ 20 сентября 2011

Не используйте регулярные выражения для анализа HTML.Используйте html-разбор lib / class, как 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}'>";

Загрузить: http://code.google.com/p/phpquery/

3 голосов
/ 16 августа 2015

После тестирования ответа отсюда Использование регулярных выражений для извлечения первого источника изображения из HTML-кодов? Я получил лучшие результаты с меньшим количеством неработающих изображений ссылок, чем приведенный здесь ответ.

Хотя регулярные выражения могут быть полезны для самых разных задач, я считаю, что при анализе HTML DOM обычно не хватает.Проблема с HTML заключается в том, что структура вашего документа настолько изменчива, что трудно точно (и я имею в виду 100% -ный показатель успеха без ложных срабатываний) извлечь тег.

Подробнеепоследовательные результаты используют этот объект http://simplehtmldom.sourceforge.net/, который позволяет вам манипулировать html.Пример приведен в ответе в первой ссылке, которую я разместил.

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

Наслаждайтесь

1 голос
/ 20 сентября 2011

Вы уверены, что регулярное выражение всегда соответствует первому?Попробуйте печатать массив каждый раз, когда вы вызываете его, чтобы увидеть:

error_log(var_export($matches, true));

...