0

在这里遇到了一个奇怪的人,也许一些更资深的人可以帮助我得出关于到底发生了什么的结论(已经有一个解决方法,但想知道如何解决这个问题,因为它似乎会影响其他人事物)

所以我有一行代码可以检测 CLI 字符串(基于 type[0]),然后继续将 CLI 参数转换并加载到 GET 参数中。

parse_str(implode("&", array_slice($payload['args'], 1)), $_GET);

效果很好,您可以通过创建文件并发出类似的东西来测试它

php - f test.php -- foo=bar bar=baz

使用上面的行和文件的内容只是一个print_r($_GET);

好吧,当您尝试将其用作 filter_input 我注意到但无法弄清楚原因时,它会变得很奇怪

$filter = filter_input_array(INPUT_GET, [
   'email'     => FILTER_VALIDATE_EMAIL,
]);

print_r($filter); //empty

看起来filter_input_array一般来说,尝试在 GET 请求上添加任何东西都被放弃了,例如

http://localhost?request=foo

$_GET['email'] = 'Someguy@somplace.com';

    //print_r($_GET); // check

print_r(filter_input_array(INPUT_GET, [
   'email'     => FILTER_VALIDATE_EMAIL,
   'request'   => FILTER_SANITIZE_ENCODED,
])):

出于未知原因,什么有效的是

$filter = filter_var_array($_GET, [
   'email'     => FILTER_VALIDATE_EMAIL,
]);

对我来说几乎没有意义=(

我想相信我们的 GET 不知何故没有注册到全球范围内,但我不知道为什么......

我正在为 Saucy 运行 PHP 5.5.8,欢迎输入

4

1 回答 1

0

函数 filter_input_array() 和 filter_input() 作用于实际输入,而不是对应的全局变量。

从 filter_input 文档中的注释:

请注意,此函数实际上没有(或至少似乎没有)根据 $_GET 等的当前值进行过滤。相反,它似乎根据原始值进行过滤。

资源

于 2014-12-05T04:12:23.623 回答