【发布时间】:2015-09-10 11:47:39
【问题描述】:
有没有办法使用 PHP 的 filter_input_array 过滤/清理多维 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);
但是如何用更多的嵌套数据来解决呢?有没有办法不拆分/展平 POST 数据?
【问题讨论】:
-
你可以很容易地编写一个递归函数来对一些数据运行
filter_input_array,然后递归到内部数组。 -
我现在正在处理类似的问题。我会让你知道我的想法。
-
我可能会尝试设计我的 HTML 表单,以便它只创建标量和/或二维数组。由于
$_POST和INPUT_POST不一样,所以扁平化$_POST不会对INPUT_POST产生任何影响。从纯粹的意义上说,我认为您希望将$_POST排除在外。如果可能的话,我的建议是让你扁平化你的 HTML 表单,而不是输入源数组。是的,诡计可以做,但代价是什么?处理时间?维护?文档?一旦您超越了二维,PHP 就会让您使用自己的设备。 :) 注意没有 INPUT_FILES。 -
你可以试试这个答案stackoverflow.com/a/4995863的第二个想法
标签: php arrays post filter sanitize