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
验证用户输入时使用这两个函数之一有什么区别?严格来说,函数调用不需要更改 $_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