我注意到你可以用PHP filter_var
函数做很多事情,也可以用其他函数来完成。
例如,过滤器FILTER_VALIDATE_REGEXP
,FILTER_SANITIZE_ENCODED
以及更多过滤器在PHP中也有各自的专用功能。
我应该何时使用filter_var
,何时应该使用PHP函数?有哪些优点和缺点?
答案 0 :(得分:7)
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示例,但是你得到了图片。统一。
答案 1 :(得分:6)
到目前为止,我还没有找到一种比使用filter_var更快(或更好)的方法来删除字符串中的特殊字符
filter_var($string, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH)
与PHP中的许多内容一样,有多种方法可以实现它们。 filter_var很方便。
答案 2 :(得分:1)
我只是在preg_match
语句中与if
并行运行微量基准测试50次,并且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
我希望同时看到内存使用同情。
希望这有帮助