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 地址来验证。
1、filter_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!";}
2、filter_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,或者是规定了过滤器、标志以及选项的数组
7、Filter 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过滤器以及包含我们的函数的数组
- PHP 过滤器(Filter)
- PHP 过滤器(Filter)
- PHP 过滤器(Filter)
- PHP 过滤器(Filter)
- PHP 过滤器(Filter)
- PHP ----过滤器(Filter)
- PHP 过滤器(Filter)
- PHP 过滤器(Filter)
- PHP过滤器filter
- PHP过滤器(Filter)
- PHP 过滤器(Filter)
- PHP 过滤器(Filter)
- php-高级(过滤器 filter)
- 45. PHP 过滤器(Filter)
- PHP Filter过滤器全面解析
- 详解PHP中的过滤器(Filter)
- PHP filter过滤器的基础使用
- PHP学习(10)-Filter过滤器总结
- 程序员技术练级攻略
- Linux下安装JDK(tar.gz格式的安装包)
- MyEclipse安装EGIT插件
- Live555-基类研究二
- mongodb 增加全文检索索引
- PHP过滤器filter
- 常用文件的文件头(十六进制)
- C51回顾七
- error while loading shared libraries: libevent-1.3.so.1: cannot open shared object file
- Qtcreator 配置 ros工程:debug ros 程序
- iOS开发之Protocol (协议) 和delegate(代理)
- C语言基础——函数
- Android的TCP和UDP传输 简单程序
- 请手动释放你的资源(Please release resources manually)