php 拓展 Filter 过滤器
- 简介
Filter,它的作用就和他的名字一样——过滤。过滤规则成为过滤器,Filter内置了多个常用过滤器,根据过滤器功能的不 同,可以分成净化过滤器(Sanitization)和验证过滤器(Validation)两种。两种的差别在于,净化过滤器会把被过滤的变量中不符合规 则的东西清除掉,返回清除后的内容;而验证过滤器只是验证的功能,并不会去改变变量的值,如果符合过滤器的规则,则返回变量内容,否则返回false;
安装
Filter的安装很简单,如果是PHP5.2.0之后的版本,应该已经默认打开了,可以通过phpinfo()来查看。如果5.2.0之前的版本,可以使用PECL来使用Filter
使用
使用filter来过滤或验证数据很简单,下面是一个简单的例子
<?php
/**
* 首先测试filter_var函数
*/
$email1 = 'huanggy@example.org';
$email2 = "example.org";
$email3 = "(huanggy@example.org)";
var_dump(filter_var($email1, FILTER_VALIDATE_EMAIL));
var_dump(filter_var($email2, FILTER_VALIDATE_EMAIL));//验证过滤器
var_dump(filter_var($email3, FILTER_SANITIZE_EMAIL));//净化过滤器
?>
结果:string(19) "huanggy@example.org" bool(false) string(19) "huanggy@example.org"
执行上面的例子,你可以知道,filter_var($var,$filter)函数是使用过滤器$filter来过滤变量$var,而透过结果来分 析,FILTER_VALIDATE_EMAIL过滤器只是验证变量$email是否负责过滤器规定的规则,符合要求则返回变量内容,不符合则返回 false;而FILTER_SANIZE_EMAIL则是对变量的内容进行净化,把不负责规则的内容都清除,然后返回清除后的结果。下面列出 Filter所有内置的过滤器
验证过滤器
| ID | NAME | OPTIONS | FLAGS | DESCRIBES |
| FILTER_VALIDATE_BOOLEAN | boolean | FILTER_NULL_ON_FATLURE | ||
| FILTER_VALIDATE_EMAIL | validate_email | |||
| FILTER_VALIDATE_FLOAT | float | decimal | FILTER_FLAG_ALLOW_THOUSAND | |
| FILTER_VALIDATE_INT | int |
min_range, max_range |
FILTER_FLAG_ALLOW_OCTACL FILTER_FLAG_ALLOW_HEX |
|
| FILTER_VALIDATE_IP | validate_ip |
FILTER_FLAG_IPV4 FILTER_FLAG_IPV6 FILTER_FLAG_NO_PRIV_RANGE FILTER_FLAG_NO_RES_RANGE |
||
| FILTER_VALIDATE_REGEXP | validate_regexp | regexp | ||
| FILTER_VALIDATE_URL | validate_url |
FILTER_FLAG_PATH_REQUIRED FILTER_FLAG_QUERY_REQUIRED |
净化过滤器
| ID | NAME | OPTIONS | FLAGS | DESCRIBES |
| FILTER_SANITIZE_EMAIL | ||||
| FILTER_SANITIZE_ENCODED | encoded |
FILTER_FLAG_STRIP_LOW FILTER_FLAG_STRIP_HIGH FILTER_FLAG_ENCODE_LOW FILTER_FLAG_ENCODE_HIGH |
||
| FILTER_SANITIZE_MAGIC_QUOTES | magic_quotes | |||
| FILTER_SANITIZE_NUMBER_FLOAT | number_float |
FILTER_FLAG_ALLOW_FRACTION FILTER_FLAG_ALLOW_THOUSAND FILTER_FLAG_ALLOW_SCIENTIFIC |
||
| FILTER_SANITIZE_NUMBER_INT | number_int | |||
| FILTER_SANITIZE_SPECIAL_CHARS | special_chars |
FILTER_FLAG_STRIP_LOW FILTER_FLAG_STRIP_HIGH FILTER_FLAG_ENCODE_HIGH |
||
| FILTER_SANITIZE_STRING | string |
FILTER_FLAG_NO_ENCODE_QUOTES FILTER_FLAG_STRIP_LOW FILTER_FLAG_STRIP_HIGH FILTER_FLAG_ENCODE_LOW FILTER_FLAG_ENCODE_HIGH FILTER_FLAG_ENCODE_AMP |
||
| FILTER_SANITIZE_STRIPPED | stripped | |||
| FILTER_SANITIZE_URL | url | |||
| FILTER_UNSAFE_RAW | unsafe_raw |
FILTER_FLAG_STRIP_LOW FILTER_FLAG_STRIP_HIGH FILTER_FLAG_ENCODE_LOW FILTER_FLAG_ENCODE_HIGH FILTER_FLAG_ENCODE_AMP |
PS. ID为过滤器的ID,NAME为过滤器的名字,OPTIONS为过滤器的可以配置的参数,FLAG为过滤器的FLAG参数,可以理解长附加选 项,DESCRIBES为过滤功能的描述了;其中ID,FLAGS为filter预定义变量,
各个变量的具体含义可以查看这里http://cn.php.net/manual/en/filter.constants.ph
filter扩展内置的函数有filter_var($var,[$filter,[$options]]) 使用过滤器$filter过滤$var变量,如果$filter可以使用配置参数,可以第三个参数$options里面配置
$int = 10;
var_dump(filter_var($int, FILTER_VALIDATE_INT)); # 输出int(10)
$options = array('options' => array('min_range' => 15));
var_dump(filter_var($int, FILTER_VALIDATE_INT, $options)); #输出bool(false)
同样的整形变量10,在第二个过滤器中加两个配置参数,最小值为15,10不满足这个条件,所以返回fasle
再看这个例子:
$int = '0xf';
var_dump(filter_var($int, FILTER_VALIDATE_INT));
$option = array('option' => array('min_range' => 15, 'flag' => FILTER_FLAG_ALLOW_HEX)); //flag 表示支持16进制 且最小数值为 15
var_dump(filter_input($int, FILTER_VALIDATE_INT, $option));
默认FILTER_VALIDATE_INT过滤认为'0xf'不是整形变量,但是加了FLAGS附件参数FILTER_FLAG_ALLOW_HEX进 去,FILTER_FLAG_ALLOW_HEX参数是允许使用十六进制的意思,'0xf'转化为十六进制等于15,符合规则,返回15
基本上就是这么用了 。其他的内置函数大体上也都是这么用,区别在于,有些为了方便大家一次多多个数据进行过滤,
像filter_var_array($data,$filter) $data为被过滤的变量,$filter为过滤器,两者通过key来对应,看下面这个例子你可以很容易的明白这个函数的用图
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);
echo '<pre>';
var_dump($myinputs);
print_r($myinputs);
echo "/n";
?>
此外还有下面几个内置函数 以后再讲解
filter_input($type,$key,[$filter,[$options]])
filter_input_array($data,$filter)
filter_has_var($type,$key);
filter_id($filte)
filter_list()
其中filter_input函数是对PHP环境固有变量进行过滤,并把值赋予$key,$type表示PHP环境变量的类型,有下面 几种
INPUT_GET,INPUT_POST,INPUT_COOKIE,INPUT_SERVER,INPUT_ENV,INPUT_SESSION, 一看就知道对应的是什么环境变量,假设你要对$_GET['huanggy']进行FILTER_VALIDATE_INT过滤,可以这样
<?php
fileter_input(INPUT_GET,'huanggy',FILTER_VALIDATE_INT);
?>
filter_input_array()和filter_input()的关系相当于前面说的filter_var()和filter_var_array()的关系。
filter_list()可以获取所有支持的内置过滤器的NAME
扩展
如果filter内置的过滤器都满足不了你,怎么办?Filter的内置过滤器中有一个叫FILTER_CALLBACK的,这个过滤器额可以帮组你
<?php
function myfilter($str) { return str_replace('9', '5', $str);}
class MyFilter {
public static function filter1($str) { return str_replace('9', '6', $str); }
}
echo filter_var('wo9w9w9', FILTER_CALLBACK, array('options' => 'myfilter'));
echo filter_var('wo9w9w9', FILTER_CALLBACK, array('options' => array('MyFilter', 'filter1')));
?>
通过这种方式,就可以自定义一个过滤规则,通过FILTER_CALLBACK过滤器来过滤了
php 拓展 Filter 过滤器的更多相关文章
- filter 过滤器(监听)
Filter 过滤器 1.简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, ...
- Java防止SQL注入2(通过filter过滤器功能进行拦截)
首先说明一点,这个过滤器拦截其实是不靠谱的,比如说我的一篇文章是介绍sql注入的,或者评论的内容是有关sql的,那会过滤掉:且如果每个页面都经过这个过滤器,那么效率也是非常低的. 如果是要SQL注入拦 ...
- Filter(过滤器)学习
一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态 ...
- javaweb学习总结(四十二)——Filter(过滤器)学习
一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态 ...
- Filter过滤器简单应用( 接口访问控制 )
一.描述 在提供安卓.IOS客户端接口时,可以在登陆接口分配Session给客户端,用于判断其他接口是否是合法访问,以避免将所有的接口都暴露在web中可以由路径直接访问.但是最近的一个项目中的移动接口 ...
- 如何配置Filter过滤器处理JSP中文乱码
参考Tomcat服务器目录webapps的examples示例 简单配置步骤:1.在项目web.xml文件添加过滤器标记<filter>和<filter-mapping>:2. ...
- Filter(过滤器)常见应用
孤傲苍狼 只为成功找方法,不为失败找借口! javaweb学习总结(四十六)——Filter(过滤器)常见应用 一.统一全站字符编码 通过配置参数charset指明使用何种字符编码,以处理Html F ...
- Filter过滤器(1)
Filter也称之为过滤器,它是Servlet技术中比较激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 ht ...
- Servlet的学习之Filter过滤器技术(1)
本篇将讲诉Servlet中一项非常重要的技术,Filter过滤器技术.通过过滤器,可以对来自客户端的请求进行拦截,进行预处理或者对最终响应给客户端的数据进行处理后再输出. 要想使用Filter过滤器, ...
随机推荐
- hdoj 1599 find the mincost route【floyd+最小环】
find the mincost route Time Limit: 1000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- Nunit Test 项目模块
下载地址:http://visualstudiogallery.msdn.microsoft.com/97bd5118-0c29-41b4-9477-d34192c183c3?SRC=VSIDE
- 把数据库中表的内容转存为XML文件
把数据库中表的内容转存为XML字符串() ::::) " Code" IsThirdStock" CreateUser::" Code ...
- Linux Resin 安装
1 Resin 下载 Resin 官方下载网址. 最新版下载 resin-4.0.36.tar.gz(免费版) resin 安装须要提前配置好jdk.配置jdk请看上面文章 2 Resin 安装 (1 ...
- 吧php脚本打包成 exe程序
操作方法 :FQ哦 https://www.youtube.com/watch?v=UQ3zxqh1YXY 有很多方法可以实现 找了个外国的哥们制作的工具 可以吧文件生成很简单的一个独立EXE文件 下 ...
- MySQL的优化点总结---通过计算多种状态的百分比看MySQL的性能情况
1 读写比例: show global status like 'com_select'; 获得服务器启动到目前查询操作执行的次数:show global status like 'com_inse ...
- 使用vi是方向键变乱码 退格键不能使用的解决方法
一.编辑/etc/vim/vimrc.tiny 由于/etc/vim/vimrc.tiny的拥有者是root用户,所以要在root的权限下对这个文件进行修改.很简单,这个文件里面的倒数第二句话是“se ...
- Java NIO——Selector机制源码分析---转
一直不明白pipe是如何唤醒selector的,所以又去看了jdk的源码(openjdk下载),整理了如下: 以Java nio自带demo : OperationServer.java Oper ...
- ZYKeyboardUtil 全自动处理键盘遮挡事件
键盘遮盖输入控件或按钮在日常app开发中避之不及,考虑各种情况下UI各种嵌套,最后还要注册监听再获取指定键盘信息.我们可以通过键盘处理工具类ZYKeyboardUtil避繁就简,利用Block的方式处 ...
- Java基础知识强化99:Java 常见异常及趣味解释
常见 Java 异常解释:(译者注:非技术角度分析.阅读有风险,理解需谨慎:) 1. java.langjava.lang软件包是java语言的核心部分,它提供了java中的基础类. java.lan ...