从字符串中获取所有图像 url [重复]

Posted

技术标签:

【中文标题】从字符串中获取所有图像 url [重复]【英文标题】:Get all images url from string [duplicate] 【发布时间】:2010-12-03 13:27:20 【问题描述】:

可能重复:How to extract img src, title and alt from html using php?

嗨, 我找到了从字符串中获取第一张图片的解决方案:

preg_match('~<img[^>]*src\s?=\s?[\'"]([^\'"]*)~i',$string, $matches);

但我无法从字符串中获取所有图像。 还有一件事...如果图像包含替代文本(alt 属性),如何获取它并保存到另一个变量? 在此先感谢, 伊利亚

【问题讨论】:

见***.com/questions/138313/… [^&amp;gt;] 不起作用,因为我怀疑你认为 :) 它实际上说“任何不是 &、g、t 或 ;”,而不是“除了字符串 > 之外的任何东西”。也就是说:改为使用 DOM 解析。 【参考方案1】:

不要用正则表达式来做这件事。相反,解析 HTML。看看Parse HTML With PHP And DOM。这是 PHP 5.2.x(可能更早)的标准特性。基本上获取图片的逻辑大致是:

$dom = new domDocument;
$dom->loadHTML($html);
$dom->preserveWhiteSpace = false;
$images = $dom->getElementsByTagName('img');
foreach ($images as $image) 
  echo $image->getAttribute('src');

这应该很容易适应查找图像。

【讨论】:

是的,这似乎是最好的解决方案。 嗨 cletus,这看起来非常简单,比正则表达式更好的解决方案。尽管如此,我还是没有设法让它与图像一起工作。是否有任何其他链接可以提供更好的解释?非常感谢! 我爱你。我知道完全有建设性的评论;)【参考方案2】:

这是我尝试过的,但无法获取 src 的打印值

 $dom = new domDocument;

    /*** load the html into the object ***/
    $dom->loadHTML($html);

    /*** discard white space ***/
    $dom->preserveWhiteSpace = false;

    /*** the table by its tag name ***/
    $images = $dom->getElementsByTagName('img');

    /*** loop over the table rows ***/
    foreach ($images as $img)
    
        /*** get each column by tag name ***/
        $url = $img->getElementsByTagName('src');
        /*** echo the values ***/
        echo $url->nodeValue;
        echo '<hr />';
    

编辑:我解决了这个问题

$dom = new domDocument;

/*** load the html into the object ***/
$dom->loadHTML($string);

/*** discard white space ***/
$dom->preserveWhiteSpace = false;

$images = $dom->getElementsByTagName('img');

foreach($images as $img)
    
        $url = $img->getAttribute('src');   
        $alt = $img->getAttribute('alt');   
        echo "Title: $alt<br>$url<br>";
    

【讨论】:

【参考方案3】:

请注意,正则表达式是解析任何涉及匹配大括号的错误方法。

最好使用DOMDocument 类。

【讨论】:

嘿,当然是 Cletus 打败了我 :)【参考方案4】:

您假设您可以使用正则表达式解析 HTML。这可能适用于某些网站,但并非所有网站。由于您将自己限制在所有网页的一个子集,因此了解您如何限制自己会很有趣......也许您可以从 php 以一种非常简单的方式解析 HTML。

【讨论】:

【参考方案5】:

查看 preg_match_all 以获取所有匹配项。

【讨论】:

以上是关于从字符串中获取所有图像 url [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用jQuery从URL获取查询字符串[重复]

如何使用正则表达式从 html 字符串中获取图像 url

使用 PHP 从 URL 字符串中获取文件路径/扩展名 [重复]

使用Javascript从URL字符串获取端口[重复]

使用Javascript从URL字符串获取端口[重复]

如何使用 Java 从 html 代码中获取图像 URL [重复]