【问题标题】:Difference between filter_var and filter_input on input data validationfilter_var 和 filter_input 在输入数据验证上的区别
【发布时间】:2016-11-17 08:36:12
【问题描述】:

在验证用户输入时使用这两个函数之一有什么区别?严格来说,对于函数调用,例如不需要更改 $_POST 数组。

$result = filter_var($_POST['user_input'], FILTER_VALIDATE_INT);

对比

$result = filter_input(INPUT_POST, 'user_input', FILTER_VALIDATE_INT);

或者上面的两个调用之间没有区别,甚至在性能方面都没有,而只是偏好问题?

PS:我知道在 SO - Differences between filter_var and filter_input 上有一个类似的问题 - 但这只是说明应该如何调用这 2 个方法,而不是实际的区别。

【问题讨论】:

  • 我不认为有这样的区别,filter_input 只是设计为将输入作为参数,filter_var 将采用变量,因此它更通用(我会去检查记录并做出回应)

标签: php performance validation filter-var filter-input


【解决方案1】:

根据我在 php.net 上阅读的内容,

filter_var 只适用于代码中的任何变量,无论何时使用它,它都会检查当时的值。

filter_input 值将检查您输入的原始值,这意味着如果您更改 $_POST['something']filter_input(INPUT-POST, "something", FILTER) 将检查您更改之前的值. 当值未设置时,它似乎也不会在执行时触发 E_NOTICE

参考php.net上的帖子

【讨论】:

  • 不是“filter_var(...) 将检查它在你改变它之前的值”,你的意思是filter_input,不是吗?这就是为什么我提到不需要更改$_POST 数组的原因,所以基本上那么区别仍然是@deceze 之前提到的:通知被触发。
  • 是的,抱歉,我现在正在编辑 :D 不过,如果您的代码在可能更改 $_POST/GET 的 CMS 或框架之后执行,那么访问原始输入可能会非常有用。 .. 变量。
【解决方案2】:

如果请求正文中根本不包含参数user_input$_POST['user_input']会触发通知,filter_input(INPUT_POST, 'user_input', ..)不会。

【讨论】:

  • 是的,所以 $_POST 应该与 isset() 进行先验检查,如果缺少分配,例如 $result = null;,而 filter_input 在这种情况下将直接返回 null。否则,如果设置了参数,没有区别?
  • 是的,如果参数存在,则没有区别。区别恰恰在于filter_input 透明地处理了丢失输入的情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-11
  • 1970-01-01
  • 2013-12-28
  • 1970-01-01
  • 1970-01-01
  • 2013-08-11
  • 2019-04-04
相关资源
最近更新 更多