Я пытаюсь получить первое изображение с каждого из моих сообщений. Этот код ниже отлично работает, если у меня есть только один образ. Но если у меня больше, чем один, это дает мне образ, но не всегда первый.
Мне действительно нужен только первый образ. Много раз второе изображение представляет собой следующую кнопку
$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;?>"/>
Если вам нужен только первый тег источника, 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']; ?>
Не используйте 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/
После тестирования ответа отсюда Используя регулярные выражения для извлечения первого источника изображения из 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; }
наслаждаться
Вы уверены, что регулярное выражение всегда соответствует первому? Попробуйте распечатать массив каждый раз, когда вы его вызываете, чтобы увидеть:
error_log(var_export($matches, true));