是否有一个PHP函数htmlspecialchars()除了某些标签以外的一切?

时间:2014-01-18 05:29:34

标签: php tags html-escape-characters

如果我可以调用my_escape($text, '<p><b><i>')除了所有<p><b><i>标记之外的所有内容,那就太好了。我正在寻找一个通用的解决方案,我可以在其中指定任意一组标签。这存在吗?如果不是,那么实施它的最佳方法是什么?

2 个答案:

答案 0 :(得分:6)

在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;
?>

答案 1 :(得分:1)

你最好的选择是做这样的事情

// 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);

最好使用正则表达式,但这需要更多解释。