我正在向RSS
写JSON parser
,作为其中的一部分,我需要在description标记内找到的任何标记上使用htmlentities()
。目前,我正在尝试使用preg_replace()
,但我正在苦苦挣扎。我当前的(非工作)代码如下所示:
$pattern[0] = "/\<description\>(.*?)\<\/description\>/is";
$replace[0] = '<description>'.htmlentities("$1").'</description>';
$rawFeed = preg_replace($pattern, $replace, $rawFeed);
如果你有更优雅的解决方案,请分享。感谢。
答案 0 :(得分:7)
简单。使用preg_replace_callback
:
function _handle_match($match)
{
return '<description>' . htmlentities($match[1]) . '</description>';
}
$pattern = "/\<description\>(.*?)\<\/description\>/is";
$rawFeed = preg_replace_callback($pattern, '_handle_match', $rawFeed);
它接受任何回调类型,也接受类中的方法。
答案 1 :(得分:0)
更优雅的解决方案是使用SimpleXML。或者是第三方库,例如XML_Feed_Parser或Zend_Feed来解析Feed。
这是一个SimpleXML示例:
<?php
$rss = file_get_contents('http://rss.slashdot.org/Slashdot/slashdot');
$xml = simplexml_load_string($rss);
foreach ($xml->item as $item) {
echo "{$item->description}\n\n";
}
?>
请记住,RSS和RDF以及Atom看起来不同,这就是为什么使用我提到的上述库之一是有意义的。