Подтвердить что ты не робот

Получение первого изображения в строке с 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_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $texthtml, $matches);
$first_img = $matches [1] [0];

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

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

Ответ 1

Если вам нужен только первый тег источника, 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'];
?>

Ответ 2

Не используйте regex для анализа html. Используйте html-parsing 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

После тестирования ответа отсюда Использование регулярных выражений для извлечения первого источника изображения из 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;
}

Enjoy

Ответ 4

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

error_log(var_export($matches, true));