PHP: использование preg_replace с htmlentities

Я пишу JSON parser RSS для JSON parser и, как часть этого, мне нужно использовать htmlentities() для любого тега, найденного внутри тега описания. В настоящее время я пытаюсь использовать preg_replace() , но я немного preg_replace() с этим. Мой текущий (нерабочий) код выглядит так:

 $pattern[0] = "/\<description\>(.*?)\<\/description\>/is"; $replace[0] = '<description>'.htmlentities("$1").'</description>'; $rawFeed = preg_replace($pattern, $replace, $rawFeed); 

Если у вас есть более элегантное решение, пожалуйста, поделитесь. Благодарю.

Solutions Collecting From Web of "PHP: использование preg_replace с htmlentities"

Просто. Использовать 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); 

Он принимает любой тип обратного вызова, а также методы в классах.

Более элегантным решением будет использование SimpleXML . Или стороннюю библиотеку, такую ​​как XML_Feed_Parser или Zend_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 выглядят по-разному, поэтому может иметь смысл использовать одну из вышеупомянутых библиотек, о которых я упоминал.