目录

Filter介绍

该Filter扩展通过验证或清理数据来筛选数据。当数据源包含未知(或外部)数据(如用户提供的输入)时,这特别有用。例如,该数据可能来自HTML表单。

过滤主要有两种:验证和清洗。

验证是用来验证或检查数据是否满足某些条件。例如,传入FILTER_VALIDATE_EMAIL将确定数据是否是有效的电子邮件地址,但不会改变数据本身。

清洗会对数据进行清洗,因此它可以通过删除不需要的字符来改变数据。例如,传入filter_sanitie_email将删除不适合电子邮件地址包含的字符。也就是说,它不能验证数据。

Filter函数

  • filter_list — 返回所支持的过滤器列表

    Array
    (
        [0] => int
        [1] => boolean
        [2] => float
        [3] => validate_regexp
        [4] => validate_domain
        [5] => validate_url
        [6] => validate_email
        [7] => validate_ip
        [8] => validate_mac
        [9] => string
        [10] => stripped
        [11] => encoded
        [12] => special_chars
        [13] => full_special_chars
        [14] => unsafe_raw
        [15] => email
        [16] => url
        [17] => number_int
        [18] => number_float
        [19] => magic_quotes
        [20] => callback
    )
    
    
  • filter_id — 返回与某个特定名称的过滤器相关联的id

  • filter_has_var — 检测是否存在指定类型的变量

    检查这些输入:INPUT_GET、 INPUT_POST、 INPUT_COOKIE、 INPUT_SERVER、 INPUT_ENV 里的其中一个的变量。

    var_dump(filter_has_var(INPUT_GET, "name"));
    
  • filter_var — 使用特定的过滤器过滤一个变量

    filter_var( mixed $variable[, int $filter = FILTER_DEFAULT[, mixed $options]] ) : mixed
    
  • filter_var_array — 获取多个变量并且过滤它们

    不需要重复调用 filter_var() 就能获取多个变量。

    filter_var数组形式,输入变量数组,通过过滤器数组进行相应变量的过滤得到新的变量数组。

    现代web框架都有封装各自的类似机制的filter过滤器。

    error_reporting(E_ALL | E_STRICT);
    $data = array(
        'product_id'    => 'libgd<script>',
        'component'     => '10',
        'versions'      => '2.0.33',
        'testscalar'    => array('2', '23', '10', '12'),
        'testarray'     => '2',
    );
    
    $args = array(
        'product_id'   => FILTER_SANITIZE_ENCODED,
        'component'    => array('filter'    => FILTER_VALIDATE_INT,
                                'flags'     => FILTER_FORCE_ARRAY, 
                                'options'   => array('min_range' => 1, 'max_range' => 10)
                            ),
        'versions'     => FILTER_SANITIZE_ENCODED,
        'doesnotexist' => FILTER_VALIDATE_INT,
        'testscalar'   => array(
                                'filter' => FILTER_VALIDATE_INT,
                                'flags'  => FILTER_REQUIRE_SCALAR,
                            ),
        'testarray'    => array(
                                'filter' => FILTER_VALIDATE_INT,
                                'flags'  => FILTER_FORCE_ARRAY,
                            )
    
    );
    
    $myinputs = filter_var_array($data, $args);
    
    var_dump($myinputs);
    echo "\n";
    
  • filter_input — 通过名称获取特定的外部变量,并且可以通过过滤器处理它

    filter_input( int $type, string $variable_name[, int $filter = FILTER_DEFAULT[, mixed $options]] ) : mixed
    

    除了待检查变量从INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER或 INPUT_ENV之一中获取外,其他的过滤器、过滤规则都和filter_var一样。

  • filter_input_array — 获取一系列外部变量,并且可以通过过滤器处理它们

    这个函数当需要获取很多变量却不想重复调用filter_input()时很有用。

Filter过滤器类型

PHP: Types of filters - Manual