需要帮助清理$ _POST数组中的数据

时间:2012-10-30 23:26:10

标签: php

这不起作用。当我在表单中输入html时。例如,当我输入水平规则时,即使$ value通过strip_tags传递,它也会显示在echo输出中。

function sanitizeString($var){
   $var = strip_tags($var);
   $var = htmlentities($var);
   return stripslashes($var);
}

foreach($_POST as $key => $value){
   echo $key."<br>";
   sanitizeString($value);
   echo $value."<br>";
} 

2 个答案:

答案 0 :(得分:2)

您实际上并没有更改$value。你丢掉了返回值。试试$value = sanitizeString($value);

答案 1 :(得分:0)

你可以尝试

$_POST = array_map(function ($var) {
    return stripslashes(htmlentities(strip_tags($var)));
}, $_POST);


foreach ( $_POST as $key => $value ) {
    echo "$key = $value <br>";
}

或者更好仍然使用filter_var

$_POST = array_map(function ($var) {
    return filter_var($var, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_LOW);
}, $_POST);

差分

$var = "index.php?name=guest<script>alert('attacked')</script>";
var_dump(stripslashes(htmlentities(strip_tags($var))));
var_dump(filter_var($var, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_LOW));

输出

string 'index.php?name=guestalert('attacked')' (length=37)
string 'index.php?name=guestalert(&#39;attacked&#39;)' (length=45)