Получение первого изображения в строке с 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;?>"/>
Ответы
Ответ 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));