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

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

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

Как я могу дезинфицировать все значения этого большого массива? например. примените strip_tags() к значениям, таким как Title , Header , Body , 1 , 23 , 65 и т. д.?

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

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

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

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

Это будет дезинфицировать ваши $_GET и $_POST .

 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); 

Предположим, мы хотим дезинфицировать массив $ _POST:

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

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