我有这样的:PHP:的foreach和数组问题
foreach($_POST as $key => $value) {
$data[$key] = filter($value);
}
filter();
条如果任何标签,而真正的逃避它们。
现在我在POST表单中也有一个数组,所以我在strip_tags()
和mysql_real_escape_string
中收到错误。我应该如何让只有$_POST["Searching"]
不被filter();
过滤?
我有这样的:PHP:的foreach和数组问题
foreach($_POST as $key => $value) {
$data[$key] = filter($value);
}
filter();
条如果任何标签,而真正的逃避它们。
现在我在POST表单中也有一个数组,所以我在strip_tags()
和mysql_real_escape_string
中收到错误。我应该如何让只有$_POST["Searching"]
不被filter();
过滤?
使用is_array():
array_walk_recursive($_POST,'filter');
,让你的函数filter
如参考取值
foreach($_POST as $key => $value) {
if (!is_array($value))
$data[$key] = filter($value);
}
您可以使用array_walk_recursive
。
function filter(&$value) {
// apply strip_tags and real escape to $value.
$value = mysql_real_escape(strip_tags($value));
}
小的语法 - 不应该'array_walk_recursive($ _ POST,过滤器);'是'array_walk_recursive($ _ POST, '过滤器');' ?另外,就像我自己的教化问题一样 - 这个函数不是在原地尝试和修改源数组,而是将它转录到一个新的数组中,比如问题中的'$ data'?我从php.net看到,这个函数只返回true或false。 – 2010-10-06 15:53:32
也不建议使用引用时间传递参考,并会引发警告。应该是'array_walk_recursive($ _ POST,'filter');' – meagar 2010-10-06 15:59:22
@ Lucanos,@ meagar:谢谢。 – codaddict 2010-10-06 16:09:10
<?php
foreach($_POST as $key => $value){
if(!is_array($_POST[$key])){
$data[$key] = filter($value);
}else{
$data[$key] = $value;
}
}
?>
此解决方案不完整 - 如果遇到数组,它什么也不做。虽然它防止了filter()在尝试处理数组时抛出错误,但这也意味着该数组会丢失数据(因为任何子数组都会被丢弃)。 – 2010-10-06 15:51:04
你是对的。我太快地输入了我的原始解决方案。 – FallenRayne 2010-10-06 16:02:21
首先,你可以使用array_map()
加快这,所有你需要做的就是允许函数识别数组并递归地调用它自己。
function filter($inVar){
if(is_array($inVar))
return array_map('filter' , $inVar);
return mysql_real_escape(strip_tags($inVar));
}
然后调用它像这样:
$data = array_map('filter' , $_POST);
在哪里? – Johnson 2010-10-06 15:48:14
是的,在foreach中,但用$ value改变$ _POST ['Searching']。我改变了答案。 – CristiC 2010-10-06 15:49:55