当前位置:  开发笔记 > 编程语言 > 正文

PHP的新input_filter不读取$ _GET或$ _POST数组

如何解决《PHP的新input_filter不读取$_GET或$_POST数组》经验,为你挑选了2个好方法。

在PHP 5.2中添加了一个很好的安全功能,名为"input_filter",所以不要说:

$name = $_GET['name'];

你现在可以说:

$name = filter_input (INPUT_GET, 'name', FILTER_SANITIZE_STRING);

它会自动清理你的字符串,还有:

FILTER_SANITIZE_ENCODED

FILTER_SANITIZE_NUMBER_INT

FILTER_SANITIZE_EMAIL

FILTER_SANITIZE_URL

所以这是一个非常方便的安全功能,我想完全切换到它.

问题是......在处理它们之前我经常操作$ _GET和$ _POST数组,如下所示:

$ _GET ['name'] ='(默认名称)';

但似乎filter_input无法访问$ _GET中的更改,因为它读取类型为int(?)的"INPUT_GET".如果我可以让filter_input改为读取$ _GET,那会很好,但是:

$name = filter_input ( $_GET, 'name', FILTER_SANITIZE_STRING );

给我错误:

Warning: filter_input() expects parameter 1 to be long, array given.

任何人都可以想到我能做到的方式:

操纵INPUT_GET(无论是什么)的源,以便我可以在filter_input读取它们之前更改其值

获取filter_input以进行读取 $_GET

ADDENDUM:


Rich问道:"为什么你要改变阵列,你肯定希望它们是一个输入,而不是你以编程方式插入的东西."

这是预处理变量的一个非常方便的地方,例如为了:

设置默认值(如果$ _GET ['state'] =''然后$ _GET ['state'] ='AL')

做手动处理(删除所有空格等)

安全性(其中一些将由filter_input现在完成)

然后我知道当我得到传入变量时,它是安全有效的.当然,我可以将$ _GET数组复制到另一个数组并处理THAT数组,但这只是一个不必要的步骤,因为I $ _GET已经是一个正常运行的数组,因此使用已经存在的这些系统数组来实现它是有意义的.



1> Simon..:

您可以使用filter_var和filter_var_array手动强制它再次读取数组

$name = filter_var ( $_GET['name'], FILTER_SANITIZE_STRING );



2> Jrgns..:

在不修改全局数组的情况下执行此操作的便捷方法:

if (!($name = filter_input(INPUT_GET, 'name'))) {
    $name = 'default_value';
}

或使用三元运算符:

$name = ($name = filter_input(INPUT_GET, 'name')) ? $name : 'default_value';

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有