filter_input()何时使用filter_var()?

Sab*_*ste 8 php sanitization

我传统上使用一个filter_var()功能来清理$_GET$_POST数据,例如:

 $foo =  filter_var($_GET['foo'], FILTER_SANITIZE_NUMBER_INT);
Run Code Online (Sandbox Code Playgroud)

但PHP也有一个函数filter_input(),它有不同的语法来完成同样的事情:

$foo = filter_input(INPUT_GET, 'foo', FILTER_SANITIZE_NUMBER_INT);
Run Code Online (Sandbox Code Playgroud)

这些只是同义词吗?使用一个优于另一个是否有优势?

我检查了手册页,但我没有看到很多区别(只是报告错误是否/如何报告).语义/最佳实践,最有意义的是什么?

Abr*_*ver 13

其中一个主要区别是它们如何处理未定义的变量/索引.如果$_GET['foo']不存在:

$foo = filter_var($_GET['foo'], FILTER_SANITIZE_NUMBER_INT);
Run Code Online (Sandbox Code Playgroud)

返回一个空字符串""并生成:

注意:未定义的索引:foo

所以你通常需要把它包装成一个if(isset($_GET['foo'])).

鉴于:

$foo = filter_input(INPUT_GET, 'foo', FILTER_SANITIZE_NUMBER_INT);
Run Code Online (Sandbox Code Playgroud)

返回NULL并且不会生成错误.

  • 那么唯一的好处是保存额外的`isset()`检查?正如我在上面的其他评论中提到的那样,为什么PHP的制造商会为一个额外的函数而烦恼,因为它具有不同的语法以获得如此少的额外好处?这不是一个修辞问题,但我不知道是否有一个简单的答案...... (2认同)