PHP 过滤器函数filter_input_array()的INPUT_POST参数,例如
filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
Run Code Online (Sandbox Code Playgroud)
似乎会覆盖应用于超全局 $_POST 的任何修改。
测试:
<?php
// 1.
$_POST['abc'] = '123';
var_dump($_POST);
// 2.
$_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
var_dump($_POST);
?>
Run Code Online (Sandbox Code Playgroud)
输出:
// 2. 之后你的 $_POST 将为空(因为初始 POST 为空)
index.php:4:
array (size=1)
'abc' => string '123' (length=3)
index.php:8:null
Run Code Online (Sandbox Code Playgroud)
所以请确保,把
$_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING, true);
Run Code Online (Sandbox Code Playgroud)
在你的脚本的顶部!
问:是否有人也注意到了这种行为——或者我在推理中犯了错误?
可能的答案:数据是从超全局$_REQUEST获取的,而不是从$_POST获取的