массивы — фильтрация многомерного POST с помощью PHP filter_input_array

Есть ли способ фильтровать / дезинфицировать многомерных данных POST с помощью PHP filter_input_array?

Дана форма, которая приводит к следующим данным POST:

$_POST[
'level1a' => [
'level2a' => [
'key1' => 'value1',
'key2' => 'value2'
],
'level2b' => [
'key1' => 'value1',
'key2' => 'value2'
]
],
'level1b' => [
'level2a' => [
'key1' => 'value1',
'key2' => 'value2'
],
'level2b' => [
'key1' => 'value1',
'key2' => 'value2'
]
]
]

Я не вижу способа сказать filter_input_array функция, что проверяемые данные вкладываются на один уровень глубже. Кажется, только флаг FILTER_REQUIRE_ARRAY, но нет способа сказать, на каком уровне он должен проверить.

Рабочий пример с меньшими размерами:

Если бы это был просто менее вложенный набор данных, это было бы довольно просто:

$_POST[
'level1a' => [
'level2a' => 'value1',
'level2b' => 'value2'
],
'level1b' => [
'level2a' => 'value1',
'level2b' => 'value2'
]
]

Может быть отфильтровано с помощью:

$args = array(
'level1a' => array(
'filter' => FILTER_SANITIZE_STRING,
'flags' => FILTER_REQUIRE_ARRAY
),
'level1b' => array(
'filter' => FILTER_SANITIZE_STRING,
'flags' => FILTER_REQUIRE_ARRAY
)
);
$form_data = filter_input_array(INPUT_POST, $args);

Но как решить это с более вложенными данными? Есть ли способ без разделения / выравнивания данных POST?

1

Решение

/**
* Trim and filter every value in the nested array
*/
function filter(array &$array)
{
array_walk_recursive($array, function (&$value) {
$value = filter_var(trim($value), FILTER_SANITIZE_STRING);
});

return $array;
}

/**
* Get filtered POST data
*/
function post(){
return filter($_POST);
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]