【发布时间】:2015-07-10 21:41:56
【问题描述】:
我正在尝试删除用户可能在文本区域中输入的任何代码。我尝试了很多东西,似乎没有任何效果。代码如下:
function strip_tags_content($text, $tags = '', $invert = FALSE) {
preg_match_all('/<(.+?)[\s]*\/?[\s]*>/si', trim($tags), $tags);
$tags = array_unique($tags[1]);
if(is_array($tags) AND count($tags) > 0) {
if($invert == FALSE) {
return preg_replace('@<(?!(?:'. implode('|', $tags) .')\b)(\w+)\b.*?>.*?</\1>@si', '', $text);
}
else {
return preg_replace('@<('. implode('|', $tags) .')\b.*?>.*?</\1>@si', '', $text);
}
}
elseif($invert == FALSE) {
return preg_replace('@<(\w+)\b.*?>.*?</\1>@si', '', $text);
}
return $text;
}
$message = $_POST['message'];
$message = nl2br($message);
$message = strip_tags($message);
$message = strip_tags_content($message);
$message = htmlentities($message);
即使有了所有这些,我仍然可以放置 html 标签并将它们打印出来并作为 html 运行。如何删除所有标签?
【问题讨论】:
-
不要使用自己的 html 清理器,尤其是使用正则表达式。您可以不可靠地在 html 上使用正则表达式。特别是如果该 html 可能是错误的/结构错误的。开始使用 html 净化器,继续做更重要的事情。
-
html 净化器仍然允许诸如粗体标签和换行符之类的标签。我也不想要那些
-
你目前得到的输入输出是什么?您应该在
strip_tags之后运行nl2br。 -
@chris85 当输入为:' dljsfkjhdsa
....?> hi 输出是 dljsfkjhdsa ....?> hi' with ....?> 粗体 -
不是我在使用该功能时得到的,请参阅此处的演示 sandbox.onlinephpfunctions.com/code/…