使用php获取字符串中的第一个图像

问题描述 投票:0回答:4

我正在尝试从我的每篇帖子中获取第一张图片。如果我只有一张图像,下面的代码效果很好。但如果我有多个,它会给我一个图像,但并不总是第一个。

我真的只想要第一张图片。很多时候第二张图片是下一个按钮

$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;?>"/>
php image preg-match-all
4个回答
51
投票

如果您只需要第一个源标签,则应使用

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
投票

不要使用正则表达式来解析 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}'>";

下载:http://code.google.com/p/phpquery/


5
投票

从这里测试答案后使用正则表达式从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;
}

享受


0
投票
    $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。

© www.soinside.com 2019 - 2024. All rights reserved.