用PHPfilter_input_array过滤多维POST
Filtering multi-dimensional POST with PHP filter_input_array
有没有办法用 PHP 的 filter_input_array
filter/sanitize 多维 POST 数据?
给定一个导致以下 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);
但是嵌套数据多了怎么解决呢?有没有 splitting/flattening 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);
}
有没有办法用 PHP 的 filter_input_array
filter/sanitize 多维 POST 数据?
给定一个导致以下 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);
但是嵌套数据多了怎么解决呢?有没有 splitting/flattening 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);
}