我试图删除用户可能在textarea中输入的任何代码。我尝试了很多东西,似乎没什么用。下面是代码:
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身份运行。如何删除所有标签?
答案 0 :(得分:1)
尝试使用filter_input功能。
示例:强>
$message = filter_input(INPUT_POST, 'message', FILTER_SANITIZE_STRING);
或
$message = filter_input(INPUT_POST, 'message', FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);
答案 1 :(得分:0)
您可以使用strip_tags功能,默认情况下会删除所有HTML和PHP标记,但您可以允许一些HTML标记(例如a,b或span,在评论中很有用)。
$message = strip_tags($_POST['message']);
$message = nl2br($message);
或
$message = nl2br($_POST['message']);
$message = strip_tags($message, '<br><br/>');
答案 2 :(得分:0)
我试图删除用户可能在textarea中输入的任何代码。我尝试了很多东西,似乎没什么用处
但你为什么要这样做呢?这不是输入问题。如果用户输入了$request = new FacebookRequest($session, 'POST', '/me/videos', array(
'description' => $description,
'title' => $title,
'source' => '@'.$file
));
$response = $request->execute()->getGraphObject()->asArray();
或<script ....>
,则不会造成任何伤害。它通常是输出(显示)上的一个问题,因此我只需要在显示之前调用htmlspecialchars()数据,以便&#34;中和&#34; HTML标记
答案 3 :(得分:0)
您可以使用HTMLPurifier类。使用起来非常简单。
阅读文档!!这是一个例子
function Sanitize_Inputs($inputs){
require_once('.../HTMLPurifier/htmlpurifier.auto.php');
$config = HTMLPurifier_Config::createDefault();
$purifier = New HTMLPurifier($config);
foreach ($inputs as $input_name => $valor){
$inputs[$input_name] = $purifier->purify($valor);
}
$purifier=null;
$config=null;
return $inputs;
}
$sanitized=Sanitize_Inputs($_POST);
var_dump($sanitized);
exit;