php开启filtervar_PHP函数filter_var的使用

一、概述

PHP中的filter_var和filter_var_array函数,主要是做来做验证的。提到这两个函数,就需要了解一下PHP的过滤器。如下:

There are two main types of filtering: validationand sanitization.

Validationis used to validate or check if the data meets certain qualifications. For example, passing in FILTER_VALIDATE_EMAIL will determine if the data is a valid email address, but will not change the data itself.

Sanitizationwill sanitize the data, so it may alter it by removing undesired characters. For example, passing in FILTER_SANITIZE_EMAIL will remove characters that are inappropriate for an email address to contain. That said, it does not validate the data.

即,php的过滤器主要有两种类型,一种是校正数据是否符合某种格式,这种类型不会修改原始数据;

另外一种是清理数据,以修改数据以符合某种格式,这种类型会修改数据。这些过滤器,都是PHP中定义好的一些常量,我们可以通过下面的方式,来获取常量的值:php -r "print_r(FILTER_SANITIZE_SPECIAL_CHARS);" // 返回FILTER_SANITIZE_SPECIAL_CHARS过滤器对应的值,即过滤器的id

当然,通过过滤器的名字,调用int filter_id ( string $filtername ),也可以查看过滤器的id。

1、常用的验证过滤器(Validate filters)过滤ID名字

(Name)选项

(option)标志

(flags)描述

FILTER_VALIDATE_BOOLEAN"boolean""default"FILTER_NULL_ON_FAILURE若为 "1", "true", "on" and "yes",则返回true;否则返回false。

如果设置了标识符FILTER_NULL_ON_FAILURE,"0", "false", "off", "no", and "",返回false,其他的返回NULL

FILTER_VALIDATE_DOMAINvalidate_domaindefaultFILTER_FLAG_HOSTNAME验证域名

FILTER_VALIDATE_EMAILvalidate_emaildefaultFILTER_FLAG_EMAIL_UNICODE验证值是否为邮箱

FILTER_VALIDATE_FLOATfloatdefault, decimalFILTER_FLAG_ALLOW_THOUSAND把值作为浮点数来验证

FILTER_VALIDATE_INTintdefault, min_range, max_rangeFILTER_FLAG_ALLOW_OCTAL,

FILTER_FLAG_ALLOW_HEX把纸作为整数

FILTER_VALIDATE_IPvalidate_ipdefaultFILTER_FLAG_IPV4, FILTER_FLAG_IPV6, FILTER_FLAG_NO_PRIV_RANGE, FILTER_FLAG_NO_RES_RANGE验证是否为有效的ip地址

FILTER_VALIDATE_MACvalidate_mac_addressdefault验证当前值是否为mac地址

FILTER_VALIDATE_REGEXPvalidate_regexpdefault验证是否为正在表达式

FILTER_VALIDATE_URLvalidate_urldefaultFILTER_FLAG_SCHEME_REQUIRED, FILTER_FLAG_HOST_REQUIRED, FILTER_FLAG_PATH_REQUIRED, FILTER_FLAG_QUERY_REQUIRED验证是否为有效的url

2、常用的清理过滤器(Sanitize filters)过滤ID名字

(Name)标志

(flags)描述

FILTER_SANITIZE_EMAILemail删除所有字符,除了字母、数字以及 !#$%&'*+-/=?^_`{|}~@.[]

FILTER_SANITIZE_ENCODEDencodedFILTER_FLAG_STRIP_LOW

, FILTER_FLAG_STRIP_HIGH,

FILTER_FLAG_STRIP_BACKTICK,

FILTER_FLAG_ENCODE_LOW,

FILTER_FLAG_ENCODE_HIGHURL-encode 字符串,去除或编码特殊字符

FILTER_SANITIZE_MAGIC_QUOTESmagic_quotes应用 addslashes()

FILTER_SANITIZE_NUMBER_FLOATnumber_floatFILTER_FLAG_ALLOW_FRACTION

, FILTER_FLAG_ALLOW_THOUSAND,

FILTER_FLAG_ALLOW_SCIENTIFIC删除所有字符,除了数字、+- 以及 .,eE

FILTER_SANITIZE_NUMBER_INTnumber_int删除所有字符,除了数字和 +-

FILTER_SANITIZE_SPECIAL_CHARSspecial_charsFILTER_FLAG_STRIP_LOW,

FILTER_FLAG_STRIP_HIGH,

FILTER_FLAG_STRIP_BACKTICK,

FILTER_FLAG_ENCODE_HIGHHTML 转义字符 '"<>& 以及 ASCII 值小于 32 的字符

3、如何查询所支持的过滤器列表呢

查询支持的过滤器列表,可以使用filter_list方法,如下:array filter_list ( void )

返回值:返回一个所支持的过滤器的名称的列表,如果没有这样子的过滤器的话则返回空数组。这个数组的索引不是过滤器id, 你可以通过 filter_id() 去根据名称获取它们。

二、filter_var函数的使用

1、函数简介

filter_var,是使用特定的过滤器来过滤一个变量。函数定义如下:mixed filter_var ( mixed $variable [, int $filter = FILTER_DEFAULT [, mixed $options ]] )

参数:

$variable 待过滤的变量,必须,如果不是字符串,PHP会自动依据转换规则,将其转为字符串。

$filter 过滤使用的过滤器ID,可选。

$option一个选项的关联数组,或者按位区分的标示。如果过滤器接受选项,可以通过数组的 "flags" 位去提供这些标示。

返回值:如果通过验证,返回过滤后的数据,否则返回false。

2、案例

比如使用FILTER_VALIDATE_INT过滤器,验证是否为整数,如下:$var = filter_var('12', FILTER_VALIDATE_INT);

var_dump($var); // 通过验证,返回12

$var = filter_var('12a', FILTER_VALIDATE_INT);

var_dump($var); // 验证失败,返回false

当然,我们还可以通过第三个参数,来设置整数的访问,以及默认的返回值。可以参考上面的验证过滤器规则,比如:$options = array(

'options' => array(

'default' => 0, // 验证失败的返回值

'min_range' => 1,   // 整数的最小值

'max_range' => 100 // 整数的最大值

),

'flags' => FILTER_FLAG_ALLOW_OCTAL,

);

$var = filter_var('5', FILTER_VALIDATE_INT, $options);

var_dump($var);

要求验证的整数范围为1~100,如果验证失败,则返回0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值