你能否用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
在一些数据上,然后递归到内部数组。 - shevron$_POST
和INPUT_POST
不同,将$_POST
展平将不会对INPUT_POST
产生任何影响。从纯粹的意义上讲,我认为您应该将$_POST
排除在外。我的建议是,如果可能的话,请展平您的HTML表单,而不是输入源数组。是的,可以使用一些技巧,但代价是什么?处理时间?维护?文档?一旦超出两个维度,PHP就会让你自己摸索了。 :) 注意,没有INPUT_FILES
。 - Anthony Rutledge