【问题标题】:Extract Image Sources from text in PHP - preg_match_all required从 PHP 中的文本中提取图像源 - preg_match_all 必需
【发布时间】:2011-07-03 09:55:08
【问题描述】:

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

我想要做的是从 wordpress 中提取 post_content 中 all the images 的 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];
}

}

}

有人可以帮忙吗...

【问题讨论】:

  • 我们可以将 $search->post_content 作为包含单个或多个图像标签的任何字符串

标签: php wordpress preg-match-all


【解决方案1】:

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

【讨论】:

  • 谢谢 - 尽管 - @$doc->loadHTML($search->post_content); - 改为为我工作 - $search->post_content 不是有效标记...非常感谢!
【解决方案2】:

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

【讨论】:

  • 谢谢老兄,我用上面的方法稍加修改:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-31
  • 2011-06-19
相关资源
最近更新 更多