7

我注意到你可以用 PHP 函数做很多事情filter_var,也可以用其他函数做。

例如,过滤器FILTER_VALIDATE_REGEXPFILTER_SANITIZE_ENCODED在 PHP 中也有各自的专用功能。

我应该什么时候使用filter_var,什么时候应该使用 PHP 函数?有什么优点和缺点?

4

3 回答 3

8

filter扩展的优点是您可以将所有内容集中在一个地方。

但你是对的,它没有提供太多新颖的功能。您可以使用现有功能完成大部分工作,特别是preg_replacepreg_match代替FILTER_VALIDATE_REGEXP. 或类型转换,并使用普通htmlspecialchars而不是过滤器选项。

然而filter_var_array,有一个好处变得显而易见。您可以根据配置过滤大量变量。您可以预定义一个过滤器列表以一次全部应用:

$_POST = filter_var_array($_POST, array(
    "text" => FILTER_SANITIZE_ENCODED,
    "id" => FILTER_VALIDATE_INT,
    "title" => FILTER_SANITIZE_ENCODED,
));

我承认这基本上是一个触发的 magic_quotes 示例,但你明白了。统一。

于 2011-12-14T01:04:15.747 回答
7

直到今天,我还没有找到比使用 filter_var 更快(或更好)从字符串中删除特殊字符的方法

filter_var($string, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH)

像 PHP 中的许多事情一样,有多种方法可以做到这一点。filter_var 很方便。

于 2011-12-14T01:07:53.897 回答
1

preg_match我只是在一个if语句中并排运行了 50 次 microtime 基准测试并filter_var_array验证完全相同的重置数据,以下是 microtime 结果:

filter_var_array
microtime: 0.000834226608276

preg_match
microtime: 0.000180006027222

filter_var_arraypreg_match看起来很漂亮,但如果你有一个高流量的网站并且更喜欢快速的代码,我会推荐它比这样慢 4 到 8 倍preg_match

但是,如果您喜欢漂亮干净的代码并且并不真正关心它的运行方式,那么使用filter_var_array它可能更易于管理,以便在许多表单请求和输入上应用简单的过滤器。

但是这种轻松也可以通过preg_match为不同场景(例如电子邮件或字母数字)编写函数来实现,但在preg_match编写正则表达式时请记住安全性,例如:

http://blog.php-security.org/archives/76-Holes-in-most-preg_match-filters.html

我也希望看到两者的内存使用同情。

希望这可以帮助

于 2013-11-12T23:38:37.320 回答