zoukankan      html  css  js  c++  java
  • 【Filter】PHP扩展之Filter【原创】

    1. 简介

    php中有个扩展,过滤器Filter,它的作用就和他的名字一样——过滤。过滤规则成为过滤器,Filter内置了多个常用过滤器,根据过滤器功能的不同,可以分成净化过滤器(Sanitization)和验证过滤器(Validation)两种。两种的差别在于,净化过滤器会把被过滤的变量中不符合规则的东西清除掉,返回清除后的内容;而验证过滤器只是验证的功能,并不会去改变变量的值,如果符合过滤器的规则,则返回变量内容,否则返回false;

    PHP5.2之后的版本默认已经安装并且打开了。

    例子:验证邮箱
    1. <?php
    2. $email1 = 'huanggy@example.org';
    3. $email2 = "example.org";
    4. $email3 = "(huanggy@example.org)";
    5. var_dump(filter_var($email1,FILTER_VALIDATE_EMAIL));
    6. var_dump(filter_var($email2,FILTER_VALIDATE_EMAIL));
    7. var_dump(filter_var($email3,FILTER_SANITIZE_EMAIL));
    8. ?>
    返回:
    1. string(19) "huanggy@example.org"
    2. bool(false)
    3. string(19) "huanggy@example.org"
    可以发现:
    filter_var($var,$filter)函数是使用过滤器$filter来过滤变量$var,而透过结果来分析,FILTER_VALIDATE_EMAIL过滤器只是验证变量$email是否负责过滤器规定的规则,符合要求则返回变量内容,不符合则返回false;
    而FILTER_SANIZE_EMAIL则是对变量的内容进行净化,把不负责规则的内容都清除,然后返回清除后的结果。

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


    简单介绍一下:

    验证过滤器:
    1. FILTER_VALIDATE_BOOLEAN: 把值作为布尔选项来验证,对 "1", "true", "on" "yes" 返回 TRUE 其余的都返回 FALSE
    2. FILTER_VALIDATE_EMAIL: 把值作为邮件地址来验证
    3. FILTER_VALIDATE_FLOAT: 把值作为浮点数来验证
    4. FILTER_VALIDATE_INT: 以整数验证值,可以选择范围
    5. FILTER_VALIDATE_IP: 把值作为 IP 进行验证
    6. FILTER_VALIDATE_REGEXP: 根据兼容 Perl 的正则表达式来验证值
    7. FILTER_VALIDATE_URL: 把值作为 URL 进行验证

    净化过滤器:
    1. FILTER_SANITIZE_EMAIL: 移除所有字符, 除了字母,数字和 !#$%&'*+-/=?^_`{|}~@.[].
    2. FILTER_SANITIZE_ENCODED: 去除 URL 编码不需要的字符, 与 urlencode() 函数很类似
    3. FILTER_SANITIZE_MAGIC_QUOTES: 在指定的预定义字符前添加反斜杠, 单引号(')、双引号(")、反斜线()与 NULL
    4. FILTER_SANITIZE_NUMBER_FLOAT: 移除所有字符, 除了数字,+- 和可选(.,)
    5. FILTER_SANITIZE_NUMBER_INT: 移除所有字符, 除了数字和 +-
    6. FILTER_SANITIZE_SPECIAL_CHARS: 用于对 "<>& 以及 ASCII 值在 32 值以下的字符进行转义
    7. FILTER_SANITIZE_STRING: 删除那些对应用程序有潜在危害的数据。它用于去除标签以及删除或编码不需要的字符
    8. FILTER_SANITIZE_STRIPPED: 去除或编码不需要的字符,是 FILTER_SANITIZE_STRING 的别名
    9. FILTER_SANITIZE_URL: 移除所有字符, 除了字母,数字和 $-_.+!*'(),{}|\^~[]`<>#%";/?:@&=.
    10. FILTER_UNSAFE_RAW: 不进行任何过滤,去除或编码特殊字符


    filter扩展内置的函数有filter_var($var,[$filter,[$options]])  使用过滤器$filter过滤$var变量,如果$filter可以使用配置参数,可以第三个参数$options里面配置

    3. 例子

    例子:验证数字
    1. <?php
    2. $int = 10;
    3. var_dump(filter_var($int,FILTER_VALIDATE_INT)); # 输出int(10)
    4. $options = array('options'=>array('min_range'=>15));
    5. var_dump(filter_var($int,FILTER_VALIDATE_INT,$options));#输出bool(false)
    返回:
    1. int(10)
    2. bool(false)
    同样的整形变量10,在我第二个过滤器中加两个配置参数,最小值为15,10不满足这个条件,所以返回fasle

    例子:验证ip地址
    1. <?php
    2. $url = "192.168.1.110";
    3. $result = filter_var($url, FILTER_VALIDATE_IP);
    4. var_dump($result); // string(13) "192.168.1.110"
    5. // 该方法也可以用来验证ipv6。
    6. $url = "2001:DB8:2de::e13";
    7. $result = filter_var($url, FILTER_VALIDATE_IP);
    8. var_dump($result); // string(17) "2001:DB8:2de::e13"
    9. $url = "ipdizhi";
    10. $result = filter_var($url, FILTER_VALIDATE_IP);
    11. var_dump($result);
    返回:
    1. string(13) "192.168.1.110"
    2. string(17) "2001:DB8:2de::e13"
    3. bool(false)

    例子:验证url地址
    1. <?php
    2. $url = "http://www.fengdingbo.com";
    3. $result = filter_var($url, FILTER_VALIDATE_URL);
    4. var_dump($result); // string(25) "http://www.fengdingbo.com"
    返回:
    1. string(25) "http://www.fengdingbo.com"

    例子:验证邮箱地址
    1. <?php
    2. $email_a = 'onedayin2013@shawn.com';
    3. $email_b = 'invalid@email';
    4. $result = filter_var($email_a, FILTER_VALIDATE_EMAIL);
    5. var_dump($result);
    6. $result = filter_var($email_b, FILTER_VALIDATE_EMAIL);
    7. var_dump($result);
    返回:
    1. string(22) "onedayin2013@shawn.com"
    2. bool(false)


    虽然filter_var()函数提供了很多用于验证的标志,但这个函数不能验证所有的数据,除了filter_var函数之外,更推荐使用一些提供验证功能的组件:
    aura/filter
    respect/validation
    symfony/validator






  • 相关阅读:
    Sed的使用方法简介
    Shell脚本基础
    网络配置与内核模块相关
    RPM管理,计划任务与性能监控
    SSH服务
    LVM与RAID阵列
    网络存储服务器
    FTP服务
    网络安全之iptables防火墙
    MySQL使用笔记(七)排序和限制数据记录查询
  • 原文地址:https://www.cnblogs.com/linewman/p/9918126.html
Copyright © 2011-2022 走看看