PHP: использование preg_replace с htmlentities
Я пишу RSS
в JSON parser
и как часть этого мне нужно использовать htmlentities()
на любом теге, найденном внутри тега описания. В настоящее время я пытаюсь использовать preg_replace()
, но я немного борюсь с этим. Мой текущий (нерабочий) код выглядит так:
$pattern[0] = "/\<description\>(.*?)\<\/description\>/is";
$replace[0] = '<description>'.htmlentities("$1").'</description>';
$rawFeed = preg_replace($pattern, $replace, $rawFeed);
Если у вас есть более элегантное решение, пожалуйста, поделитесь. Благодарю.
2 ответа
Решение
Просто. использование 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 выглядят по-разному, поэтому имеет смысл использовать одну из перечисленных выше библиотек.