在PHP中清理表单数据

时间:2009-05-21 19:37:24

标签: php

是否可以通过简单地执行

来清理PHP中一个方法发送的所有输入
$var = mysql_real_escape_string($_POST);

然后访问$ var的元素,因为我有$ _POST?

5 个答案:

答案 0 :(得分:9)

我认为你不能在数组上调用mysql_real_escape_string

但这会起作用

$cleanData = array_map('mysql_real_escape_string', $_POST);

array_map通过在传递给它的数组的每个元素上调用引号中的函数来工作,并返回一个新数组作为结果。

superUntitled一样,我更喜欢使用自定义功能,并根据需要使用内置的清理功能。但您仍然可以使用带有array_map的自定义函数来实现相同的结果。

答案 1 :(得分:1)

作为旁注,我建议使用一种功能来清理你的结果:

function escape($txt) {
    if (get_magic_quotes_gpc())
        $txt = stripslashes($txt);

    if (!is_numeric($txt))
        $txt = "'" . mysql_real_escape_string($txt) . "'";

   return $txt;
}

答案 2 :(得分:1)

此函数将从传递给它的任何内容中删除html标记

function strip_html(&$a){
    if(is_array($a)){
        foreach($a as $k=>$v){
            $a[$k]=preg_replace('/<[^<]+?>/','',$v);
        }
    }else{
            $a=preg_replace('/<[^<]+?>/','',$a);
    }
    return;
}

答案 3 :(得分:0)

我觉得方便的是将请求数据(Post,Get,Cookie等)封装到Object中,然后添加一个可以传递函数名数组的过滤器方法。这样你可以像这样使用它:

$array = array('trim','mysql_real_escape_string');
$request->filter($array);

方法的主体使用一个循环和一个像Mark的例子中的array_map。我不会在我的整个$ _POST上运行mysql_real_escape_string,只会在必要的字段(被查询或插入的字段)上运行

答案 4 :(得分:0)

@Shadow:

Array_Map将与单维数组一起使用,但它不适用于多维数组。 所以,这将有效。

$cleanData = array_map('mysql_real_escape_string', $_POST);

但是如果那个$ _POST数组要有另一个数组,就像这样: $array = $_POST['myArray']['secondArray'];

如果你有一个如上所示的数组,当你尝试运行一个只接受String作为参数的函数时,数组映射会抛出一个错误,因为当它只期望一个字符串时它不会处理一个数组。 / p>

下面的页面提供的解决方案更方便,并且对数组中的每个元素都是递归的。

PHP -Sanitize values of a array