从PHP中的文本中提取图像源 - 需要preg_match_all

时间:2011-02-24 09:02:32

标签: php wordpress preg-match-all

我有一点问题,因为我的preg_match_all运行不正常。

我想要做的是从wordpress中提取post_content中所有图像的src参数,这是一个字符串 - 不是一个完整的html文档/ DOM(因此不能使用文档解析器函数) )

我目前正在使用下面的代码,遗憾的是它太不整洁,仅适用于1个图像src,我想要来自该字符串的所有图像源

preg_match_all( '/src="([^"]*)"/', $search->post_content, $matches);

if ( isset( $matches ) )
{  

foreach ($matches as $match) 
{

if(strpos($match[0], "src")!==false)
{
$res = explode("\"", $match[0]);
echo $res[1];
}

}

}

有人可以在这里帮忙......

2 个答案:

答案 0 :(得分:8)

使用正则表达式解析HTML文档非常容易出错。就像你的情况一样,IMG个元素不仅有SRC attribute(事实上,根本不需要是HTML属性)。除此之外,也可能是属性值未包含在双引号中。

更好地使用像PHP’s DOMDocument这样的HTML DOM解析器及其方法:

$doc = new DOMDocument();
$doc->loadHTML($search->post_content);
foreach ($doc->getElementsByTagName('img') as $img) {
    if ($img->hasAttribute('src')) {
        echo $img->getAttribute('src');
    }
}

答案 1 :(得分:0)

您可以使用带有HTML字符串的DOM解析器,没有必要拥有完整的HTML文档。 http://simplehtmldom.sourceforge.net/