我有一个来自$_POST[]
的数组,并且可以在其中包含其他数组,例如:
array(
'title' => 'Title',
'data' => array(
'hdr' => 'Header'
'bdy' => 'Body'
),
'foo' => array(1, 23, 65),
...
)
如何清理这个大阵列的所有值?
例如。将strip_tags()
应用于标题,标题,正文, 1 ,等值, 65 等?
答案 0 :(得分:49)
只需使用filter extension。
/* prevent XSS. */
$_GET = filter_input_array(INPUT_GET, FILTER_SANITIZE_STRING);
$_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
这将清理您的$_GET
和$_POST
。
答案 1 :(得分:8)
<?php
$a = array(
'title' => 'Title',
'data' => array(
'hdr' => 'Header',
'bdy' => 'Body'
),
'foo' => array(1, 23, 65)
);
$b = array_map("strip_tags", $a);
print_r($b);
?>
更新2D阵列:
function array_map_r( $func, $arr )
{
$newArr = array();
foreach( $arr as $key => $value )
{
$newArr[ $key ] = ( is_array( $value ) ? array_map_r( $func, $value ) : ( is_array($func) ? call_user_func_array($func, $value) : $func( $value ) ) );
}
return $newArr;
}
用法:
$a = array(
'title' => 'Title',
'data' => array(
'hdr' => 'Header',
'bdy' => 'Body'
),
'foo' => array(1, 23, 65)
);
$ar =array_map_r('strip_tags', $a);
print_r($ar);
注意我只是通过搜索Dimension
的评论才发现这一点答案 2 :(得分:3)
function strip($string, $allowed_tags = NULL)
{
if (is_array($string))
{
foreach ($string as $k => $v)
{
$string[$k] = strip($v, $allowed_tags);
}
return $string;
}
return strip_tags($string, $allowed_tags);
}
这是递归函数的一个示例,用于在这种情况下剥离标记。
$arr = strip($arr);
答案 3 :(得分:1)
看起来不错,但是请评论一下是否可以改进或有任何疑虑:
$_GET =filter_var_array($_GET);
$_POST=filter_var_array($_POST);
答案 4 :(得分:0)
假设我们要清理$ _POST数组:
foreach($_POST as $k=>$v) {$_POST[$k] = htmlspecialchars($v);}
这很简单。不是吗?