如何获得<;img>;src来自RSS中的CDATA


How to get <img> src from CDATA in RSS?

我正在使用Magpie从RSS提要中获取数据
$rss[description]包含带有html元素的CDATA:

<![CDATA[  
<div>  
 <a href='url'>  
  <img src='img_url' alt='aaa' title='bbb' border='0' width='116' height='116'>  
 </a>  
</div>]]>  
Some other text  

如何从中获取"img_url"?preg_match()是唯一的方法吗?也许我可以使用simpleXML?

CDATA是一个包含HTML的字符串。所以,首先将其视为文本,但由于该文本旨在包含HTML,所以使用适合解析HTML的解决方案来解析该文本。

换句话说:为作业(解析HTML)使用适当的工具(HTML解析器)

已经有在PHP中解析HTML的现有解决方案-例如,请参阅以下问题的答案:

  1. 如何使用PHP解析和处理HTML
  2. 健壮、成熟的PHP HTML解析器

因此,基本上,您已经能够从XML中获取HTML字符串了。现在,使用上面提到的一些解决方案解析HTML并获取图像源。

使用preg_match()解析HTML不是一个好主意,因为它需要非常复杂才能完成HTML解析器适合的简单操作。

在可以使用适当工具的地方,最好不要使用正则表达式。我脑海中浮现的东西(尽管也许可以做得更容易):

$descr = $rss[description]; // String. You have extracted description part from your feed
$dom = new DOMDocument();
$dom->loadHTML($descr); // or you can use loadXML
if (!$dom) {
    die('Error loading HTML string.');
}
$xml = simplexml_import_dom($dom);
$imgSrc = (string)$xml->body->div->a->img['src'];

我们开始吧。根据您的示例,CDATA $imgSrc将等于img_url

是的,您应该使用regex,CDATA意味着数据应该被视为正常字符串而不进行解析,所以您应该将其视为字符串。。