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"; } ?>