为什么这不起作用的任何想法?
$_POST = array('edit' => array('name' => 'test'));
die(var_dump(
filter_var_array($_POST, array(
'edit["name"]' => FILTER_SANITIZE_STRING,
'edit[name]' => FILTER_SANITIZE_STRING,
)),
$_POST
));
如果要求它是一个数组,我如何清理/过滤POST参数?
答案 0 :(得分:2)
不知道filter_var_array()
不支持递归。但是,不要认为没有理由不这样做。这是一个简单的解决方案:
// 28 01 2010, Gajus Kuizinas
function hp_path_to_array($keys, $value, $data = array())
{
if(empty($keys))
{
return $value;
}
$key = array_shift($keys);
$data[$key] = hp_path_to_array($keys, $value, $data);
return $data;
}
function hp_filter_var_array($data, $rules)
{
$return = array();
foreach($rules as $k => $options)
{
$path = explode('[', str_replace(']', '', $k));
if(empty($path))
{
continue;
}
if(!is_array($options))
{
$filter = $options;
$options = array();
}
else
{
$filter = $options['filter'];
unset($options['filter']);
}
$value = $data;
foreach($path as $key)
{
if(isset($value[$key]))
{
$value = $value[$key];
}
else
{
$value = NULL;
break;
}
}
$return += hp_path_to_array($path, filter_var($value, $filter, $options));
unset($rules[$k]);
}
$return += filter_var_array($data, $rules);
return $return;
}
答案 1 :(得分:2)
修剪和清理嵌套数组
$array = $_POST;
array_walk_recursive($array, function (&$v) {
$v = filter_var(trim($v), FILTER_SANITIZE_STRING);
});
$prepared = $array;
答案 2 :(得分:0)
有一个过滤器标志可以做到这一点:它确保您的参数$_POST['edit']
是一个数组,并过滤/清理数组的元素而不是参数本身。
$_POST = array('edit' => array('name' => 'test'));
die(var_dump(
filter_var_array($_POST, array(
'edit' => [
'filter' => FILTER_SANITIZE_STRING,
'flag' => FILTER_REQUIRE_ARRAY
]
))
));