是否可以通过简单地执行
来清理PHP中一个方法发送的所有输入$var = mysql_real_escape_string($_POST);
然后访问$ var的元素,因为我有$ _POST?
答案 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>
下面的页面提供的解决方案更方便,并且对数组中的每个元素都是递归的。