Есть ли функция PHP для htmlspecialchars() все, кроме определенных тегов?

Было бы хорошо, если бы я мог позвонить my_escape($text, '<p><b><i>') что ускользает от всего, кроме всего <p>, <b> а также <i> теги. Я ищу общее решение, в котором я могу указать произвольный набор тегов. Это существует? Если нет, каков наилучший подход для его реализации?

2 ответа

Решение

В функции htmlspecialchars он преобразует теги html в

& to &amp;
" to &quot;
' to &#039;
< to &lt;
> to &gt;

после конвертации вы можете сделать обратное, чтобы декодировать

<?php
$test="<p><b><a>Test</b></a></p>";

$test = htmlspecialchars($test);

$test = str_replace("&lt;p&gt;", "<p>", $test);
$test = str_replace("&lt;i&gt;", "<i>", $test);
$test = str_replace("&lt;b&gt;", "<b>", $test);
$test = str_replace("&lt;/b&gt;", "</b>", $test);
$test = str_replace("&lt;/i&gt;", "</i>", $test);
$test = str_replace("&lt;/p&gt;", "</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);

Было бы лучше использовать регулярное выражение, но это объясняет гораздо больше.

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