Есть ли способ фильтровать / дезинфицировать многомерных данных 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?
/**
* 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);
}
Других решений пока нет …