从字符串中获取所有图像 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/…[^&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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章