filter_var 和 filter_input 在输入数据验证方面的区别

Difference between filter_var and filter_input on input data validation

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

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

对比

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

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

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

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

根据我在 php.net、

上阅读的内容

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

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

参考 post php.net