我注意到你可以用 PHP 函数做很多事情filter_var
,也可以用其他函数做。
例如,过滤器FILTER_VALIDATE_REGEXP
等FILTER_SANITIZE_ENCODED
在 PHP 中也有各自的专用功能。
我应该什么时候使用filter_var
,什么时候应该使用 PHP 函数?有什么优点和缺点?
我注意到你可以用 PHP 函数做很多事情filter_var
,也可以用其他函数做。
例如,过滤器FILTER_VALIDATE_REGEXP
等FILTER_SANITIZE_ENCODED
在 PHP 中也有各自的专用功能。
我应该什么时候使用filter_var
,什么时候应该使用 PHP 函数?有什么优点和缺点?
filter
扩展的优点是您可以将所有内容集中在一个地方。
但你是对的,它没有提供太多新颖的功能。您可以使用现有功能完成大部分工作,特别是preg_replace
或preg_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 示例,但你明白了。统一。
直到今天,我还没有找到比使用 filter_var 更快(或更好)从字符串中删除特殊字符的方法
filter_var($string, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH)
像 PHP 中的许多事情一样,有多种方法可以做到这一点。filter_var 很方便。
preg_match
我只是在一个if
语句中并排运行了 50 次 microtime 基准测试并filter_var_array
验证完全相同的重置数据,以下是 microtime 结果:
filter_var_array
microtime: 0.000834226608276
preg_match
microtime: 0.000180006027222
filter_var_array
preg_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
我也希望看到两者的内存使用同情。
希望这可以帮助