PHP -Sanitize значения массива - PullRequest
       2

PHP -Sanitize значения массива

15 голосов
/ 01 февраля 2011

У меня есть массив, который исходит из $_POST[] и может содержать другие массивы в качестве значений, например:

array(
 'title' => 'Title',
 'data' => array(
             'hdr' => 'Header'
             'bdy' => 'Body'
           ),
  'foo' => array(1, 23, 65),
  ...
)

Как я могу очистить все значения этого большого массива?напримерприменять strip_tags() к таким значениям, как Заголовок , Заголовок , Тело , 1 , 23 , 65 и т. Д.

Ответы [ 4 ]

49 голосов
/ 01 февраля 2011

Просто используйте расширение фильтра .

/* prevent XSS. */
$_GET   = filter_input_array(INPUT_GET, FILTER_SANITIZE_STRING);
$_POST  = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);

Это очистит ваши $_GET и $_POST.

8 голосов
/ 01 февраля 2011

Посмотрите на 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);
?>

Обновление для 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);

Примечание Iнашел это просто путем поиска комментариев для Dimension

3 голосов
/ 01 февраля 2011
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);
0 голосов
/ 01 октября 2012

Допустим, мы хотим очистить массив $ _POST:

foreach($_POST as $k=>$v) {$_POST[$k] = htmlspecialchars($v);}

Это просто.Не так ли?

...