我想知道是否可以获取一个变量,无论它是在POST还是get中,然后使用filter_put()对其进行清理。
起初,我认为$var = filter_input(INPUT_POST | INPUT_GET, "var", FILTER_SANITIZE_STRING)
可能有效,但它不起作用,而且PHP手册规定您只能传递一种类型的输入。
我还尝试了INPUT_REQUEST
,奇怪的是它不起作用。该函数可以识别它(即它不会抛出一个错误,说我在$input中放错了什么),但它不会得到任何代码。是的,我知道不要在现场环境中使用INPUT_REQUEST
,我只是纯粹测试它是否有效。
目前我做以下工作:
$var = filter_input(INPUT_POST, "var", FILTER_SANITIZE_STRING);
if(!$var) $var = filter_input(INPUT_GET, "var", FILTER_SANITIZE_STRING);
然而,对于PHP中的许多内容,通常有一种更简单的方法可以在一个命令中为我完成所有操作。我想知道这里是不是这样,我能把它们合并成一张支票吗?我在谷歌上粗略搜索了一下,甚至找不到任何以前尝试过的人的参考资料,更不用说解决方案了,所以现在我求助于你们这些好人。
如果您不知道您的输入是在GET
还是POST
中,则认为这是一种糟糕的做法。你应该永远知道,而不是随便接受任何东西。
我认为没有比用您已经提到的代码创建自定义函数更好的方法了:
function getPostOrGet($name) {
$var = filter_input(INPUT_POST, $name, FILTER_SANITIZE_STRING);
if(!$var) $var = filter_input(INPUT_GET, $name, FILTER_SANITIZE_STRING);
return $var;
}
如果你认为这是正常的,你就不能使用|
运算符,因为如果它在两者中都定义了会发生什么。
还要注意,由于这是一种糟糕的做法,它没有一种"简单"的方法。因此,如果你真的需要,请使用自定义函数,如果可以的话,只使用正确的输入类型。
$data = array_merge(filter_input_array(INPUT_POST), filter_input_array(INPUT_GET));
$var = $data["var"];
如果在使用filter_put_array中的选项之前需要进行消毒:http://php.net/manual/de/function.filter-input-array.php
例如:
$args = array(
'var' => FILTER_SANITIZE_STRING
);
合并:
$data = array_merge(filter_input_array(INPUT_POST, $args), filter_input_array(INPUT_GET, $args));
$var = $data["var"];
根据我的阅读,您可以将表单中的值POST
更改为GET
-这样您只需要接受GET
-不确定我是否正确理解了它。
如果您正确地清理您的输入,我会亲自测试filtre_input
对null
的结果,因为if(!$var)
条件可能由一个错误但现有的值(如0
)触发。
例如:
function getLatitude($name) {
$var = filter_input(INPUT_POST, 'latitude', FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
if($var === null){
$var = filter_input(INPUT_GET, 'latitude', FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
}
return $var;
}
使用通常的!$var
条件和FILTER_SANITIZE_NUMBER_FLOAT
,您将获得null
值,而不是0
。
旧主题,但在某些情况下,它可能很方便
$var = filter_var($_REQUEST['var'], FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW);