过滤器就是对输入的内容过滤,清除其中不符合过滤规则的内容,并将其余的内容返回的过程,对用户输入的内容进行无害化处理。
过滤器的使用方法
过滤器使用分为两种,一种是使用单个过滤器,一种是使用过滤器链,都是用Zend_Filter组件完成的。
使用单个过滤器
Zend_Filter中已经事先定义很多常用的的过滤器子类。要使用这些过滤器,首先要加载相应的组件,然后为类实例化对象,再调用对象的filter()方法即可。如下:
$filter=new Zend_Filter_StringToLower(); //StringToLowerz 这个呢是
$temp1="abcdEFGHIGKLMNopqrstuvwXYz";
$temp2="我爱BeiJing天安门";
echo "内容:".$temp1."<p>经过滤后:";
echo $filter->filter($temp1);
echo "<p>";
echo "内容:".$temp2."<p>经过滤后:";
echo $filter->filter($temp2);
使用过滤链
过滤链就是多个过滤器的一个连接。在对指定的内容进行过滤时,每个过滤器将按照其顺序分别进行过滤或者转化操作。当所有的过滤操作都被执行完毕时,过滤链返回最终的过滤结果。
创建一个过滤链,首先为类Zend_Filter实例化一个对象,然后通过该实例化的addFilter()方法向过滤器中添加过滤器。该方法的语法格式如下。
addFilter(Zend_Filter_Interface $filter);
其中,参数$filter为一个定义的过滤器类的实例。执行方法,指定的过滤器将被添加到过滤器链中。
举个例子,该例子将使用Zend_Filter_Alpha过滤器与Zend_Filter_StringToUpper过滤器分别实现对字母与数值的过滤。
$filterChain=new Zend_Filter();
$filterChain->addFilter(new Zend_Filter_Alpha()) //使用创建的对象调用addFilter方法
->addFilter(new Zend_Filter_StringToUpper());
$temp1="1234sadfDSFDSA345dfg";
$temp2="@#%$@%234rfesffSDFSw23ffffff";
echo "内容:".$temp1."<p>经过滤后:";
echo $filterChain->filter($temp1);
echo "<p>";
echo "内容:".$temp2."<p>经过滤后:";
echo $filterChain->filter($temp2);
上述代码创建的是一个过滤链,然后往里边添加Alpha过滤器和StringToUpper过滤器。通过过滤链,非字母内容(包括空格)都被过滤,且剩余的字母也都被转化为了大写,说明使用过滤链成功执行了多重过滤操作。。。
在Zendframework的Filter类中,系统预定义了几类常用的过滤器,这些预定义过滤器可以直接使用,具体如下表:
名称 | 过滤内容 | 名称 | 过滤内容 |
Almum | 所有非字母或数字的内容 | Int | 非正数的内容 |
Alpha | 所有非字母的内容 | RealPath | 所有非规范化的绝对路径名 |
BaseName | 给定路径所有非文件名部分 | StringToLower | 字母全部转换为小写 |
Digits | 所有非数值的内容 | StringToUpper | 字母全部转换为大写 |
Dir | 给定路径所有非目录部分 | StringTrim | 字符串首尾的空格 |
HtmlEntities | 替换HTML标记符“<”与“>” | StripTags | 去除字符串的HTML内容 |
Input | 这个特殊,放下一节单独说吧! |
|
|
其中,Alpha、StringToLower、StringToLower过滤器在前两节已经提到了,在这我就不说了,重点呢说说剩下的。
Alnum字母或数值过滤器
使用Zend_Filter_Alnum过滤器可以对给定内容中的非数字也非字母的内容进行过滤,比如说一个字符串“`123!$#^&*$abc ”经过滤后为 "123abc" 了。
该过滤对于要求仅有字母与数值内容的场合(如用户名)时非常实用。
HtmlEntities HTML过滤器
Zend_Filter_HtmlEntities过滤器可以对给定内容中的HTML代码进行过滤。该过滤器就是对php函数中的htmlentities()进行了封装,所以通过此过滤器的HTML内容将被过滤掉。
比如字符串内容为"<img src='1.jpg'>" ,经过Zend_Filter_HtmlEntities过滤后, HTML不会起作用,也就是不会显示此图片,会将"<img src='1.jpg'>" 原样输出。
Int整形数过滤器
Zend_Filter过滤器中的Int过滤器可以对指定的数值进行整形转换,即将非整数部分过滤掉。对于要求输入内容仅为整数的场合非常有用。
比如内容为 “23” “5.423” “-4.8” 经过过滤后依次为 "23" "5" "-4"
其实使用php中的intval()也可以达到这样的效果。
StripTags HTML字符过滤器
Zend_Filter_StripTags过滤器的作用是将字符串中的HTML内容进行删除。该过滤器与Zend_Filter_HtmlEntities过滤器不同,Zend_Filter_HtmlEntities是将“<”、“>”等符号进行转换。而Zend_Filter_StripTags过滤器则是直接过滤掉“<”、“>”的等符号所包含的内容!
比如说字符串:<img src='1.jpg'> 经过滤后 "" 什么都没了,因为他除了符号包含的内容没有其他内容。
<h1>我爱xiaobai<h1> 经过滤后的‘我爱xiaobai’ 会没有标签<h1>的效果。