PHP何时使用filter_var而不是内置的php函数

时间:2011-12-14 00:58:12

标签: php filter-var

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

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

我应该何时使用filter_var,何时应该使用PHP函数?有哪些优点和缺点?

3 个答案:

答案 0 :(得分:7)

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示例,但是你得到了图片。统一。

答案 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

我希望同时看到内存使用同情。

希望这有帮助