gpt4 book ai didi

php - filter_var 与 preg_match

转载 作者:可可西里 更新时间:2023-11-01 00:38:38 24 4
gpt4 key购买 nike

早上好

我正在转换我正在处理的网站以与最新版本的 PHP 兼容,因此我正在检查并用未折旧的等效项替换所有 ereg 实例。然而,有人告诉我有一个名为 filter_var 的方便的 PHP 内置函数。

我的问题是,使用 filter_var 而不是 preg_match 是否有意义?至于选择一个而不是另一个是否有性能提升或任何其他好处,如果有的话,它们是什么?

最佳答案

首先,关于过滤的 PHP 手册页:https://php.net/manual/en/book.filter.php

其次,上下文是关键。一般来说,过滤器函数被设计为使用外部输入(标量或数组),或内部输入。外部输入来自 HTTP 请求/PHP 引擎或表单提交等来源。

带有 filter_input 前缀的过滤函数允许您完全绕过 $_SERVER、$_COOKIE、$_POST 和 $_GET 超全局变量。虽然您通常会指定要从“何处”获取数据,但过滤函数不会明确使用 $_POST、$_GET、$_COOKIE 和$_SERVER。您对变量/数组元素所做的更改不会显示在 $_GET、$_POST 或 $_SERVER 中,因此以这种方式使用过滤器是一种范式转变,可能会显着改变您的应用程序的流程。换句话说,您必须自己跟踪外部输入。我这样做是为了对外部输入进行初始清理(剥离、替换、更改等)。我不再使用 $_POST、$_GET 或 $_SERVER。尽管如此,我仍然使用 $_FILES。

filter_var 为前缀的函数用于过滤程序中已存在的任何通用数组。我在使用 filter_input 之后使用它。您可以在这两种情况下使用许多过滤器,但您的问题是关于性能

如果您选择将 FILTER_VALIDATE_REGEXP 过滤器与任何过滤函数一起使用,我无法想象这种间接方法比直接使用 preg_match() 更有效。就其他过滤器而言,如果它们只是从正则表达式调用中删除了“n”个方法/函数,我也看不到效率的提高

我认为过滤器功能旨在帮助提高跨许多应用程序发生的过滤任务的一致性。它们可能不是为了更高效而设计的,但它们肯定是为了比正则表达式更可访问而设计的(尽管我非常擅长正则表达式)。我更喜欢直接了解正在发生的事情,但有些人不关心或可能不关心。但是,过滤器功能为那些不了解正则表达式和其他基本 Web 应用程序安全流程的人打开了过滤字符串的大门。

不过,人们当然可以不使用过滤功能。

此外,我将过滤器函数与我自己的 sanitizer 和验证器类结合使用。所以,我不是要 PHP 为我思考,我只是用它来增强我已经知道该怎么做的功能(以防它们的功能得到我想念的东西)。纵深防御。

总而言之,您最好的选择就是简单地使用 preg_match(),除非您打算改变流程(filter_input 函数)输入到您的应用程序中。即使那样,也不会有性能提升,但您可以绕过 $_SERVER、$_POST 和 $_GET。此外,您还可以利用更简单、结构化、一致的过滤功能,并能够使用回调函数 (FILTER_CALLBACK) 来调用自定义的内部方法/函数(我也这样做) .此外,您仍然可以使用您自己的正则表达式和使用 FILTER_VALIDATE_REGEXP 过滤器的过滤器函数,但同样,我认为没有理由相信如果您这样做,您的应用程序的性能会提高。可维护性?可能是。这取决于编写代码的人。

关于php - filter_var 与 preg_match,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1544214/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com