使用变量将值传递给filter_input()

Ili*_*sev 2 php filter-input

任何人都可以解释一下,为什么我会收到非常奇怪的警告:

filter_input() expects parameter 1 to be long, string given
Run Code Online (Sandbox Code Playgroud)

在执行代码时,这是我班级的一部分,看起来非常好:

public static function Input($type, $data, $filter = 'FILTER_SANITIZE_SPECIAL_CHARS')
  {
    $type = 'INPUT_' . $type;
    return filter_input($type, $data, $filter);
  }
Run Code Online (Sandbox Code Playgroud)

如果我将其更改为,例如:

return filter_input(INPUT_POST, $data, $filter);

然后警告去:

filter_input() expects parameter 3 to be long.

如果我使用的话,一切正常:

return filter_input(INPUT_POST, $data, FILTER_SANITIZE_SPECIAL_CHARS);


我在PHP上意识到:filter_input - 手册在描述中说明:

描述

mixed filter_input ( int $type , string $variable_name [, int $filter = FILTER_DEFAULT [, mixed $options ]] )
Run Code Online (Sandbox Code Playgroud)

参数

type
   One of INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER, or INPUT_ENV.
Run Code Online (Sandbox Code Playgroud)


问题:

  1. 为什么在手动据说filter_input ( int $type ,-当既不INPUT_GET也不INPUT_POST和等是一个整数.
  2. 有没有办法将值传递给filter_input使用变量?

dec*_*eze 7

你应该使用的是常数.这些常量具有整数值.所以文档完全正确,INPUT_GET是一个整数.试试var_dump(INPUT_GET).

如果需要从字符串中获取常量值,请使用constant():

echo constant('INPUT_' . $type);
Run Code Online (Sandbox Code Playgroud)