PHP过滤器filter

来源:互联网 发布:java静态代理模式 编辑:程序博客网 时间:2024/05/19 02:17

Php中有许多数据是从页面用户输入的,后台处理的时候要先进行必要的过滤,过滤用filter函数。

 

函数

描述

PHP

filter_has_var()

检查是否存在指定输入类型的变量。

5

filter_id()

返回指定过滤器的 ID 号。

5

filter_input()

从脚本外部获取输入,并进行过滤。

5

filter_input_array()

从脚本外部获取多项输入,并进行过滤。

5

filter_list()

返回包含所有得到支持的过滤器的一个数组。

5

filter_var_array()

获取多项变量,并进行过滤。

5

filter_var()

获取一个变量,并进行过滤。

5

 

PHP Filters

ID 名称

描述

FILTER_CALLBACK

调用用户自定义函数来过滤数据。

FILTER_SANITIZE_STRING

去除标签,去除或编码特殊字符。

FILTER_SANITIZE_STRIPPED

"string" 过滤器的别名。

FILTER_SANITIZE_ENCODED

URL-encode 字符串,去除或编码特殊字符。

FILTER_SANITIZE_SPECIAL_CHARS

HTML 转义字符 '"<>& 以及 ASCII 值小于 32 的字符。

FILTER_SANITIZE_EMAIL

删除所有字符,除了字母、数字以及 !#$%&'*+-/=?^_`{|}~@.[]

FILTER_SANITIZE_URL

删除所有字符,除了字母、数字以及 $-_.+!*'(),{}|\\^~[]`<>#%";/?:@&=

FILTER_SANITIZE_NUMBER_INT

删除所有字符,除了数字和 +-

FILTER_SANITIZE_NUMBER_FLOAT

删除所有字符,除了数字、+- 以及 .,eE

FILTER_SANITIZE_MAGIC_QUOTES

应用 addslashes()

FILTER_UNSAFE_RAW

不进行任何过滤,去除或编码特殊字符。

FILTER_VALIDATE_INT

在指定的范围以整数验证值。

FILTER_VALIDATE_BOOLEAN

如果是 "1", "true", "on" 以及 "yes",则返回 true,如果是 "0", "false", "off", "no" 以及 "",则返回 false。否则返回 NULL

FILTER_VALIDATE_FLOAT

以浮点数验证值。

FILTER_VALIDATE_REGEXP

根据 regexp,兼容 Perl 的正则表达式来验证值。

FILTER_VALIDATE_URL

把值作为 URL 来验证。

FILTER_VALIDATE_EMAIL

把值作为 e-mail 来验证。

FILTER_VALIDATE_IP

把值作为 IP 地址来验证。

 

1filter_has_var()

判断页面上是否存在指定类型的变量(html表单中name的值

如下例:

Login.html 

<input type="type" name="names">

Filter.php 

$cont = $_GET[names]; if (filter_has_var(INPUT_GET, names)) {echo "<BR>has names var";}else{echo "<BR>hasn't names var!";}

2filter_var()

 Login.html

<form action="filter.php" method="get">输入内容:<input type="type" name="input">  <input type="submit" name="submit">  </form> 


Filter.php 

$cont = $_GET['input']; if (filter_var($cont,  FILTER_VALIDATE_INT)) {<span style="white-space:pre"></span>echo "<BR>input value is integer!";}else{<span style="white-space:pre"></span>echo "<BR>input value is not integer!";<pre name="code" class="html"><span style="font-family: Arial, Helvetica, sans-serif;">}</span>


$cont变量的值如果是int类型的数据就进入if里面,否则进入到else里面。

 

3、选项和标志用于指定的过滤器添加额外的过滤选项:

 Login.html

$cont = $_GET['myfile'];<span style="white-space:pre"></span>$int_options = array(<span style="white-space:pre"></span>"options"=>array(<span style="white-space:pre"></span>"min_range"=>0,<span style="white-space:pre"></span>"max_range"=>300<span style="white-space:pre"></span>));

Filter.php 

if (filter_has_var(INPUT_GET, 'myfile')) {<span style="white-space:pre"></span>echo "<BR>has myfile var";<span style="white-space:pre"></span>if (filter_var($cont, FILTER_VALIDATE_INT, $int_options)) {<span style="white-space:pre"></span>echo "<BR>Integer is valid!";<span style="white-space:pre"></span>}else{<span style="white-space:pre"></span>echo "<BR>Integer is not valid!";<span style="white-space:pre"></span>}}else{<span style="white-space:pre"></span>echo "<BR>hasn't myfile var!";}


 

4、邮件类型判断:

一般filter_has_var和filter_var结合起来使用,先判断指定类型的变量是否存在,然后再判断变量的类型,如判断是否是邮件类型:

$cont = $_GET['myfile']; if (filter_has_var(INPUT_GET, 'myfile')) {<span style="white-space:pre"></span>echo "<BR>has myfile var";<span style="white-space:pre"></span>if (filter_var($cont, FILTER_VALIDATE_EMAIL)) {<span style="white-space:pre"></span>echo "<BR>myfile value is email type!";<span style="white-space:pre"></span>}else{<span style="white-space:pre"></span>echo "<BR>input value is not email type!";<span style="white-space:pre"></span>}}else{<span style="white-space:pre"></span>echo "<BR>hasn't myfile var!";}


5、Url地址净化:

try {<span style="white-space:pre"></span>if (filter_has_var(INPUT_GET, 'url')) {<span style="white-space:pre"></span>$url = $_GET['url'];<span style="white-space:pre"></span>echo "<BR>url 字段在表单中存在!";<span style="white-space:pre"></span>echo filter_input(INPUT_GET, 'url',FILTER_SANITIZE_URL);<span style="white-space:pre"></span>}else{<span style="white-space:pre"></span>throw new Exception("<BR>url 字段在表单中不存在!");<span style="white-space:pre"></span>}} catch (Exception $e) {<span style="white-space:pre"></span>echo "<BR>Message :".$e->getMessage();}


 

6过滤多个输入:

$filters = array("name"=>array("filter"=>FILTER_SANITIZE_STRING),"age"=>array("filter"=>FILTER_VALIDATE_INT,"option"=>array("min_range"=>1,"max_range"=>120)),"email"=>FILTER_SANITIZE_EMAIL);$result = filter_input_array(INPUT_GET, $filters);if (!$result['age']) {echo "<BR>Age must be a number between 1 and 120.<br />";}elseif (!$result['email']){echo "E-Mail is not valid.<br />";}else{echo "User input is valid";}

上面的这个例子有三个通过“get”方法传送的输入变量(name,age,email)

1)设置一个数组,其中包含了输入变量的名称,以及用于指定的输入变量的过滤器

2)调用filter_input_array函数,参数包括GET输入变量及刚才设置的数组

3)检测$result变量中的“age”和“email”变量是否有非法的输入。(如果存在非法输入,)filter_input_array()函数的第二个参数可以使数组或单一过滤器的ID

如果该参数是单一过滤器的ID,那么这个指定的过滤器会过滤输入数组中所有的值。

 

如果该参数是一个数组,那么次数组必须遵循下面的规则:

必须是一个关联数组,其中包含的输入变量是数组的键(比如“age”输入变量)

次数组的值必须是过滤器的ID,或者是规定了过滤器、标志以及选项的数组

 

7Filter Callback

通过使用FILTER_CALLBACK过滤器,可以调用自定义的函数,把它作为一个过滤器来使用。这样就拥有了数据过滤的完全控制权。

function convertSpace($string){return str_replace("_", " ", $string);}function callbackLee(){$string = "Peter_is_a_great_guy!";echo filter_var($string,FILTER_CALLBACK, array("options"=>"convertSpace"));}//end func callbackLeeecho "<BR><BR>";callbackLee();

这个例子把所有的“_”转换为空格:

首先创建一个把“_”替换为空格的函数;

然后调用filter_var()函数,它的参数是FILTER_CALLBACK过滤器以及包含我们的函数的数组

 

 

 

 Login.html
Filter.php 
0 0
原创粉丝点击