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 выглядят по-разному, поэтому имеет смысл использовать одну из перечисленных выше библиотек.

Другие вопросы по тегам