PHP过滤器

这里介绍的过滤器包括:

1、filter_input

2、filter_input_array

3、filter_var

4、filter_var_array

5、filter_has_var

 

一、查看有哪些filter可用

首先,我们需要知道现在有哪些filter可用。这时候需要用到filter_list()和filter_id(),如下:

<?php 
$filters = filter_list(); 
foreach($filters as $filter_name) { 
    echo $filter_name .": ".filter_id($filter_name) ."<br>"; 
} 
?> 

Will result in: 
boolean: 258 
float: 259 
validate_regexp: 272 
validate_url: 273 
validate_email: 274 
validate_ip: 275 
string: 513 
stripped: 513 
encoded: 514 
special_chars: 515 
unsafe_raw: 516 
email: 517 
url: 518 
number_int: 519 
number_float: 520 
magic_quotes: 521 
callback: 1024

上面的代码中,filter_list()输出可用filter的list 到filters这一array,然后,历遍这一array,显示filter的名字和id。

这里不做多的解释,反正可用的filter就上面这么多。

然后,我们来看看我们可以用上面的过滤器做些什么。

 

二、filter_input和filter_input_array

事实上两个是同一个过滤器,但是filter_input_array是可以接受“过滤器组合”的,具体调用如下:

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

mixed filter_input_array ( int $type [, mixed $definition [, bool $add_empty = true ]] )

上面的定义中:

1)$type接受的参数是固定的,是INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER, 或者INPUT_ENV中的一个。

2)filter_input中,$variable_name是要使用过滤器的变量名,$filter就是我们上面filter_list过的可用filter之一,$filter可以是一个array。也就是,我们对$variable_name进行过滤时,可以用多个filter。

3)$options是具体的filter要用到的参数,不同的filter需要不同的参数,有些甚至不需要参数。

4)filter_input_arrary中,第二个参数是$definition的一个array。根据manual提供的例子,所谓definition,也就是$variable-$filter-$options构成的一个组合。看起来就像是,我们对多个filter_input进行了一次性定义,然后一次性的执行。

示例代码:

<?php
$search_html = filter_input(INPUT_GET, 'search', FILTER_SANITIZE_SPECIAL_CHARS);
echo "You have searched for $search_html.\n";
?>
<?php
// 下面定义了一个array,分别为product_id,component,versions,doesnotexist定义了一个过滤规则。
$args = array(
    'product_id'   => FILTER_SANITIZE_ENCODED,
    'component'    => array('filter'    => FILTER_VALIDATE_INT,
                            'flags'     => FILTER_REQUIRE_ARRAY, 
                            'options'   => array('min_range' => 1, 'max_range' => 10)
                           ),
    'versions'     => FILTER_SANITIZE_ENCODED,
    'doesnotexist' => FILTER_VALIDATE_INT,
);

//执行了上面定义的几条过滤规则
$myinputs = filter_input_array(INPUT_POST, $args); var_dump($myinputs); echo "\n"; ?>

 

三、filter_var和filter_var_array

和上面的filter_input其实是一样的,只是,filter_var的输入是var,而不再是固定的那几个选项。

例如:

<?php
var_dump(filter_var('bob@example.com', FILTER_VALIDATE_EMAIL));
var_dump(filter_var('http://example.com', FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED));
?>

上面的输出是:

string(15) "bob@example.com"
bool(false)

 

3、filter_has_var

这个事实上不能算是过滤器,就是看我们的输入里有没有名为variable_name的参数,所以它只返回true和false。具体参数参考filter_input,举个栗子就搞定:

<?php
if ( filter_has_var(INPUT_GET, 'email') ) {
        echo "Email Found";
}else{
        echo "Email Not Found";
}
?>

 

posted @ 2014-03-18 15:09  Biiigfish  阅读(943)  评论(0编辑  收藏  举报