我正在尝试从我的每篇帖子中获取第一张图片。如果我只有一张图像,下面的代码效果很好。但如果我有多个,它会给我一个图像,但并不总是第一个。
我真的只想要第一张图片。很多时候第二张图片是下一个按钮
$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'];
?>
不要使用正则表达式来解析 html。 使用 html 解析库/类,如 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}'>";
从这里测试答案后使用正则表达式从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;
}
享受
$mydoc = new DOMDocument();
$mydoc->loadHTML($text);
$imgs = $mydoc->getElementsByTagName('img');
if ($imgs->length > 0) {
$first_img = $imgs->item(0);
print_r( $first_img->getAttribute("src") );
}
因此 $first_img->getAttribute("src") 将打印找到的第一个 src。