Есть ли функция PHP для htmlspecialchars() все, кроме определенных тегов?
Было бы хорошо, если бы я мог позвонить my_escape($text, '<p><b><i>')
что ускользает от всего, кроме всего <p>
, <b>
а также <i>
теги. Я ищу общее решение, в котором я могу указать произвольный набор тегов. Это существует? Если нет, каков наилучший подход для его реализации?
2 ответа
Решение
В функции htmlspecialchars он преобразует теги html в
& to &
" to "
' to '
< to <
> to >
после конвертации вы можете сделать обратное, чтобы декодировать
<?php
$test="<p><b><a>Test</b></a></p>";
$test = htmlspecialchars($test);
$test = str_replace("<p>", "<p>", $test);
$test = str_replace("<i>", "<i>", $test);
$test = str_replace("<b>", "<b>", $test);
$test = str_replace("</b>", "</b>", $test);
$test = str_replace("</i>", "</i>", $test);
$test = str_replace("</p>", "</p>", $test);
echo $test;
?>
Лучше всего сделать что-то подобное
// Add placeholders
$search = array('<p>', '<b>');
$replace = array("\ap\a", "\ab\a");
$text = str_replace($search, $replace, $text);
$text = htmlspecialchars($text);
// Put it all back together
$text = str_replace($replace, $search, $text);
Было бы лучше использовать регулярное выражение, но это объясняет гораздо больше.