-2

这不起作用。当我在表单中输入 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>";
} 
4

2 回答 2

2

你实际上并没有改变$value。您正在丢弃返回值。试试$value = sanitizeString($value);

于 2012-10-30T23:27:35.510 回答
0

你可以试试

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


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

或 Better Sill 使用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)
于 2012-10-30T23:29:29.267 回答