【问题标题】:Get all images url from string [duplicate]从字符串中获取所有图像 url [重复]
【发布时间】: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 属性),如何获取它并保存到另一个变量?
在此先感谢,
伊利亚

【问题讨论】:

  • [^&amp;gt;] 不起作用,因为我怀疑你认为 :) 它实际上说“任何不是 &、g、t 或 ;”,而不是“除了字符串 > 之外的任何东西”。也就是说:改为使用 DOM 解析。

标签: php html string image parsing


【解决方案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 以获取所有匹配项。

      【讨论】:

        猜你喜欢
        • 2015-02-07
        • 2012-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-29
        • 1970-01-01
        • 2015-08-21
        相关资源
        最近更新 更多