1. 简介
php中有个扩展,过滤器Filter,它的作用就和他的名字一样——过滤。过滤规则成为过滤器,Filter内置了多个常用过滤器,根据过滤器功能的不同,可以分成净化过滤器(Sanitization)和验证过滤器(Validation)两种。两种的差别在于,净化过滤器会把被过滤的变量中不符合规则的东西清除掉,返回清除后的内容;而验证过滤器只是验证的功能,并不会去改变变量的值,如果符合过滤器的规则,则返回变量内容,否则返回false;<?php
$email1 = 'huanggy@example.org';
$email2 = "example.org";
$email3 = "(huanggy@example.org)";
var_dump(filter_var($email1,FILTER_VALIDATE_EMAIL));
var_dump(filter_var($email2,FILTER_VALIDATE_EMAIL));
var_dump(filter_var($email3,FILTER_SANITIZE_EMAIL));
?>
string(19) "huanggy@example.org"
bool(false)
string(19) "huanggy@example.org"
2. 过滤器
ID | NAME | OPTIONS | FLAGS | DESCRIBES |
FILTER_VALIDATE_BOOLEAN | boolean | FILTER_NULL_ON_FATLURE | ||
FILTER_VALIDATE_EMAIL | validate_email | |||
FILTER_VALIDATE_FLOAT | float | decimal | FILTER_FLAG_ALLOW_THOUSAND | |
FILTER_VALIDATE_INT | int |
min_range, max_range |
FILTER_FLAG_ALLOW_OCTACL FILTER_FLAG_ALLOW_HEX | |
FILTER_VALIDATE_IP | validate_ip |
FILTER_FLAG_IPV4 FILTER_FLAG_IPV6 FILTER_FLAG_NO_PRIV_RANGE FILTER_FLAG_NO_RES_RANGE | ||
FILTER_VALIDATE_REGEXP | validate_regexp | regexp | ||
FILTER_VALIDATE_URL | validate_url |
FILTER_FLAG_PATH_REQUIRED FILTER_FLAG_QUERY_REQUIRED |
ID | NAME | OPTIONS | FLAGS | DESCRIBES |
FILTER_SANITIZE_EMAIL | ||||
FILTER_SANITIZE_ENCODED | encoded |
FILTER_FLAG_STRIP_LOW FILTER_FLAG_STRIP_HIGH FILTER_FLAG_ENCODE_LOW FILTER_FLAG_ENCODE_HIGH | ||
FILTER_SANITIZE_MAGIC_QUOTES | magic_quotes | |||
FILTER_SANITIZE_NUMBER_FLOAT | number_float |
FILTER_FLAG_ALLOW_FRACTION FILTER_FLAG_ALLOW_THOUSAND FILTER_FLAG_ALLOW_SCIENTIFIC | ||
FILTER_SANITIZE_NUMBER_INT | number_int | |||
FILTER_SANITIZE_SPECIAL_CHARS | special_chars |
FILTER_FLAG_STRIP_LOW FILTER_FLAG_STRIP_HIGH FILTER_FLAG_ENCODE_HIGH | ||
FILTER_SANITIZE_STRING | string |
FILTER_FLAG_NO_ENCODE_QUOTES FILTER_FLAG_STRIP_LOW FILTER_FLAG_STRIP_HIGH FILTER_FLAG_ENCODE_LOW FILTER_FLAG_ENCODE_HIGH FILTER_FLAG_ENCODE_AMP | ||
FILTER_SANITIZE_STRIPPED | stripped | |||
FILTER_SANITIZE_URL | url | |||
FILTER_UNSAFE_RAW | unsafe_raw |
FILTER_FLAG_STRIP_LOW FILTER_FLAG_STRIP_HIGH FILTER_FLAG_ENCODE_LOW FILTER_FLAG_ENCODE_HIGH FILTER_FLAG_ENCODE_AMP |
FILTER_VALIDATE_BOOLEAN: 把值作为布尔选项来验证,对 "1", "true", "on" 和 "yes" 返回 TRUE, 其余的都返回 FALSE
FILTER_VALIDATE_EMAIL: 把值作为邮件地址来验证
FILTER_VALIDATE_FLOAT: 把值作为浮点数来验证
FILTER_VALIDATE_INT: 以整数验证值,可以选择范围
FILTER_VALIDATE_IP: 把值作为 IP 进行验证
FILTER_VALIDATE_REGEXP: 根据兼容 Perl 的正则表达式来验证值
FILTER_VALIDATE_URL: 把值作为 URL 进行验证
FILTER_SANITIZE_EMAIL: 移除所有字符, 除了字母,数字和 !#$%&'*+-/=?^_`{|}~@.[].
FILTER_SANITIZE_ENCODED: 去除 URL 编码不需要的字符, 与 urlencode() 函数很类似
FILTER_SANITIZE_MAGIC_QUOTES: 在指定的预定义字符前添加反斜杠, 单引号(')、双引号(")、反斜线(\)与 NULL
FILTER_SANITIZE_NUMBER_FLOAT: 移除所有字符, 除了数字,+- 和可选(.,)
FILTER_SANITIZE_NUMBER_INT: 移除所有字符, 除了数字和 +-
FILTER_SANITIZE_SPECIAL_CHARS: 用于对 "<>& 以及 ASCII 值在 32 值以下的字符进行转义
FILTER_SANITIZE_STRING: 删除那些对应用程序有潜在危害的数据。它用于去除标签以及删除或编码不需要的字符
FILTER_SANITIZE_STRIPPED: 去除或编码不需要的字符,是 FILTER_SANITIZE_STRING 的别名
FILTER_SANITIZE_URL: 移除所有字符, 除了字母,数字和 $-_.+!*'(),{}|\\^~[]`<>#%";/?:@&=.
FILTER_UNSAFE_RAW: 不进行任何过滤,去除或编码特殊字符
<?php
$int = 10;
var_dump(filter_var($int,FILTER_VALIDATE_INT)); # 输出int(10)
$options = array('options'=>array('min_range'=>15));
var_dump(filter_var($int,FILTER_VALIDATE_INT,$options));#输出bool(false)
int(10)
bool(false)
<?php
$url = "192.168.1.110";
$result = filter_var($url, FILTER_VALIDATE_IP);
var_dump($result); // string(13) "192.168.1.110"
// 该方法也可以用来验证ipv6。
$url = "2001:DB8:2de::e13";
$result = filter_var($url, FILTER_VALIDATE_IP);
var_dump($result); // string(17) "2001:DB8:2de::e13"
$url = "ipdizhi";
$result = filter_var($url, FILTER_VALIDATE_IP);
var_dump($result);
string(13) "192.168.1.110"
string(17) "2001:DB8:2de::e13"
bool(false)
<?php
$url = "http://www.fengdingbo.com";
$result = filter_var($url, FILTER_VALIDATE_URL);
var_dump($result); // string(25) "http://www.fengdingbo.com"
string(25) "http://www.fengdingbo.com"
<?php
$email_a = 'onedayin2013@shawn.com';
$email_b = 'invalid@email';
$result = filter_var($email_a, FILTER_VALIDATE_EMAIL);
var_dump($result);
$result = filter_var($email_b, FILTER_VALIDATE_EMAIL);
var_dump($result);
string(22) "onedayin2013@shawn.com"
bool(false)
aura/filter