PHP从用户输入中删除html和php代码

时间:2015-07-10 21:41:56

标签: php html post input

我试图删除用户可能在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身份运行。如何删除所有标签?

4 个答案:

答案 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类。使用起来非常简单。

http://htmlpurifier.org/

阅读文档!!这是一个例子

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;