filter_input()何时使用filter_var()?

时间:2016-10-26 18:48:02

标签: php sanitization

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

 $foo =  filter_var($_GET['foo'], FILTER_SANITIZE_NUMBER_INT);

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

$foo = filter_input(INPUT_GET, 'foo', FILTER_SANITIZE_NUMBER_INT);

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

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

1 个答案:

答案 0 :(得分:11)

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

$foo = filter_var($_GET['foo'], FILTER_SANITIZE_NUMBER_INT);

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

  

注意:未定义的索引:foo

因此,您通常需要将其包装在if(isset($_GET['foo']))

鉴于:

$foo = filter_input(INPUT_GET, 'foo', FILTER_SANITIZE_NUMBER_INT);

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