PHP -Sanitize значения массива
У меня есть массив, который исходит от $_POST[]
и может содержать в себе другие массивы в виде значений, например:
array(
'title' => 'Title',
'data' => array(
'hdr' => 'Header'
'bdy' => 'Body'
),
'foo' => array(1, 23, 65),
...
)
Как я могу дезинфицировать все значения этого большого массива?
например. примените strip_tags()
к значениям, например Заголовок, Заголовок, Тело, 1, 23, 65 и т.д.
Ответы
Ответ 1
Посмотрите 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);
Примечание. Я нашел это, просто просмотрев комментарии для Dimension
Ответ 2
Просто используйте расширение .
/* prevent XSS. */
$_GET = filter_input_array(INPUT_GET, FILTER_SANITIZE_STRING);
$_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
Это будет дезинфицировать ваши $_GET
и $_POST
.
Ответ 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);
Ответ 4
Скажем, мы хотим дезинфицировать массив $_POST:
foreach($_POST as $k=>$v) {$_POST[$k] = htmlspecialchars($v);}
Это просто. Не правда ли?