PHP -Sanitize数组的值

Ale*_*lex 15 php arrays sanitization multidimensional-array

我有一个数组,它来自$_POST[]并可以有其他数组作为值,如:

array(
 'title' => 'Title',
 'data' => array(
             'hdr' => 'Header'
             'bdy' => 'Body'
           ),
  'foo' => array(1, 23, 65),
  ...
)
Run Code Online (Sandbox Code Playgroud)

如何清理这个大阵列的所有值?例如.施加strip_tags()到像值标题,标题,正文,1,23,65等?

Alf*_*red 50

只需使用过滤器扩展.

/* prevent XSS. */
$_GET   = filter_input_array(INPUT_GET, FILTER_SANITIZE_STRING);
$_POST  = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
Run Code Online (Sandbox Code Playgroud)

这会消毒你的$_GET$_POST.

  • `FILTER_SANITIZE_STRING` 已在 PHP 8.1 中弃用。 `FILTER_SANITIZE_FULL_SPECIAL_CHARS` 是仍然有效的最接近的替代品。 (6认同)

kie*_*ran 8

看看array_map

<?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);
?>
Run Code Online (Sandbox Code Playgroud)

更新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;
}
Run Code Online (Sandbox Code Playgroud)

用法:

$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);
Run Code Online (Sandbox Code Playgroud)

注意我只是通过搜索Dimension的注释找到了这个

  • 已有函数,array_walk_recursive() (5认同)