简单入门PHP中的过滤器相关函数一般在业务开发中,我们对于一些参数数据的过滤大部分还是使用传统的 if 以及正则进行判断过滤。但其实 PHP 中也提供了一些过滤器,可以帮助我们方便地进行数据的过滤筛选以及部分替换操作。今天我们就来简单的学习一下这些函数的使用。 过滤函数首先还是从代码入手,过滤器这块的参数配置比较丰富,我们不会一一的讲解,只通过例子进行简单的了解即可,更复杂的应用大家可以自行查阅相关的文档。
这段代码是针对数字类型的过滤,使用的是 filter_var() 函数。从函数的名称就可以看出,这个函数的作用就是过滤变量。在这段测试代码中,我们使用了 FILTER_VALIDATE_INT 这个常量参数,它的意思就是过滤验证整数类型。然后我们还为它指定了一个 options ,也就是一个选项参数,里面设置了数字过滤的范围是 0 到 3 。 输出的结果和我们预期的一样,如果没有被过滤掉,这个 filter_var() 返回的就是原来的数据,如果被过滤掉了,那么它返回的就是一个 false 。除了数字类型的过滤操作之外,还比较常用的就是邮件地址的过滤操作。
很明显,只要将 FILTER_VALIDATE_INT 换成 FILTER_VALIDATE_EMAIL 就可以实现标准邮件地址的过滤操作。而 options 也可以看出是一个可选的参数,在这段测试代码中我们并没有使用这个参数。
上文中说过,过滤相关的函数还可以实现简单的替换过滤操作,这里我们使用 FILTER_SANITIZE_EMAIL 就可以将数据替换成正常的邮件地址。SANITIZE 的意思是消毒、净化的意思,所以带 SANITIZE 相关的常量参数都是有这种净化的作用,也就是清除一些无用的字符。FILTER_SANITIZE_EMAIL 会清除除了标准字符、数字以及 !#$%&'*+-=?^_`~@.[] 这些符号之外的其它字符。比如我们上面这段代码中就是把 email3 中的小括号给清除掉了。 批量过滤filter_var() 的作用是过滤一个变量的内容,在 PHP 中,也为我们提供了批量过滤数据的函数,它可以批量过滤指定数组中的数据。
这段代码使用的 filter_var_array() 看起来很复杂,其实和 filter_var() 的意思是差不多的,只是第一个参数变成了一个数组,而第二个参数也是一个数组的配置选项。两个数组的键要对应上,这样才能针对第一个数据数组中的数据进行过滤操作。 配置选项的数组中,默认情况下可以只给一个过滤常量,也可以通过一个二维数组通过 filter 字段指定过滤常量。同样地,在这个配置二维数组中可以指定 flags 和 options 。关于这三个字段的说明我们将在下节讲解。 在这段测试代码中, FILTER_SANITIZE_ENCODED 表示清理并编码数据。FILTER_FORCE_ARRAY 表示标记为数组,返回的结果会变成一个数组。FILTER_REQUIRE_SCALAR 表示返回一个标量字段,也就是必须是一个标题类型,不能是数组或者对象之类的内容。 过滤组件中的这些常量参数比较多,大家可以参考文档在实际应用中选择需要的常量。 过滤参数的说明在上面的测试代码中,我们已经见过有几种类型的配置选项。比如 filter 、 flags 、options 。它们都是干什么用的呢? ValidationFilter 相关的参数常量又分为 Validation 和 Sanitization 这两种类型。在上面的测试代码里面我们都已经见过了。 Validation 类型的,比如上面的 FILTER_VALIDATE_INT 这种,主要就是验证数据,作用于 filter_var() 或者 filter_var_array() 之后,如果数据不符合规则的话,就会返回 false 结果,如果数据通过的话,就返回原始的数据信息。 SanitizeSanitization 类型的,比如上面的 FILTER_SANITIZE_ENCODED ,就是前面说过的清理数据,可以通过删除不需要的字符来更改数据。注意,它不验证数据,只是清理更改。 FlagsFlags 是可以和 Validation 以及 Sanitization 配合使用的一种标记参数,或者可以说是针对于这两种配置参数的一个扩展,可以提供一些额外的功能。比如我们上面代码中使用到的 FILTER_REQUIRE_SCALAR 。 具体的这些参数的信息,可以在官方文档的 Types of filters 中看到。另外还有一个 options ,可以用于配置一些选项信息,使用得比较多的就是在上面测试中定义数字类型的区间 min_range 和 max_range 。 全局请求参数过滤讲完了一些配置信息的基础说明之后,我们再来看看其它函数的使用。
filter_has_var() 用于判断指定的全局数据范围内某个数据是否存在。从这个 INPUT_GET 就可以看出,它判断的是 GET 请求参数中是否存在某个数据。如果我们通过代码直接给 $_GET 赋值的话,这个函数返回的也是 false 。也就是说,它判断的结果必须是正式从外面传递过来的数据。因此,我们可以再启动一个本地服务,然后通过 url 参数来进行测试。
filter_input() 的使用和 filter_has_var() 类似,不过它是起到了过滤使用的函数。就像 filter_var() 一样,这个函数针对的是全局变量中的数据。同样地,它也有批量过滤的函数可以使用。
上述的这三个函数不仅可以接收 INPUT_GET ,还可以接收 INPUT_POST 、 INPUT_COOKIE 、INPUT_SERVER 以及 INPUT_ENV 这些参数。相信这个就不用多解释了,从名称就可以看出来这些参数代表的是什么意思。 其它相关函数另外还有两个比较简单的函数,我们直接来看看它们的作用了解一下即可。
用于返回所支持的过滤器列表,其实根据这些名字加上 FILTER_VALIDATE_ 就是这个过滤器的常量名称。但其实这些常量在源码中定义的都是一个数字符号。
当然,它是把 VALIDATE 和 SANITIZE 混合在一起的,比如这个 FILTER_SANITIZE_FULL_SPECIAL_CHARS 是属于 SANITIZE 中的常量参数。不过我们有另外一个函数可以获得这些常量参数对应的数字符号。
filter_id() 函数就是根据过滤器的名称获得这个过滤器的数字符号的函数,或者说这个数字符号就是这个过滤器的 id 。可以看到,522 也是包含在打印出来的数据中的。 总结怎么样,这一套过滤相关的扩展函数是不是有点意思,大家可以多尝试在实际的业务代码中应用它们。这些函数是 PHP 中的默认函数,不需要额外的编译安装,上手就可以使用,非常地方便。 测试代码: https://github.com/zhangyue0503/dev-blog/blob/master/php/2021/04/source/6.%E7%AE%80%E5%8D%95%E5%85%A5%E9%97%A8PHP%E4%B8%AD%E7%9A%84%E8%BF%87%E6%BB%A4%E5%99%A8%E7%9B%B8%E5%85%B3%E5%87%BD%E6%95%B0.php 参考文档: https://www./manual/zh/book.filter.php |
|