6

我想知道是否有可能在 POST 或 GET 中获取变量,然后使用 filter_input() 对其进行清理。

起初我认为这$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 中有很多东西,通常有更简单的方法可以在一个命令中为我完成所有操作。我想知道这里是否是这种情况,我可以将它们合并为一张支票吗?我在谷歌上进行了粗略的搜索,甚至找不到任何以前尝试过的人的参考资料,更不用说解决方案了,所以现在我求助于各位好人。

4

6 回答 6

3

如果您不知道您的输入是否在GET或中,这被认为是不好的做法POST。你应该永远知道,而不是随便接受什么。

于 2013-08-02T14:35:38.590 回答
2

我认为没有比使用您已经提到的代码制作自定义函数更好的方法了:

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;

}

如果你认为它是正常的,你就不能使用|操作符,因为如果在两者中都定义了它会发生什么。

另请注意,由于这是一种不好的做法,因此它没有“简单”的方法。因此,如果您确实需要它,请使用自定义函数,并尽可能仅使用正确的输入类型。

于 2017-11-03T13:07:56.787 回答
1

派对有点晚了。我有同样的问题。我对这种情况的解决方案是这样的:

$data = array_merge(filter_input_array(INPUT_POST), filter_input_array(INPUT_GET));
$var = $data["var"];

如果您需要在使用 filter_input_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"];
于 2018-10-25T05:52:27.280 回答
0

根据我读到的内容,您可以将POST表单中的值更改为GET- 这样您只需要接受GET- 不确定我是否理解正确。

于 2013-11-19T19:04:52.090 回答
0

老话题,但在某些情况下它可能很方便

$var = filter_var($_REQUEST['var'], FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW); 
于 2020-06-22T15:07:13.527 回答
0

如果您正确清理输入,我会亲自测试filtre_inputfor的结果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

于 2017-12-05T11:20:07.633 回答