第10章 过滤器(Zend_Filter)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
10.5
小结
本章介绍了Zend Framework中的过滤器组件.使用 中的过滤器组件. 本章介绍了 中的过滤器组件 Zend_Filter可以有效过滤用户的输入数据,这种机制广泛应 可以有效过滤用户的输入数据, 可以有效过滤用户的输入数据 用于互动网络应用程序中. 用于互动网络应用程序中.使用过滤器过滤掉或者转化用户 所输入内容中的不合规则成份, 所输入内容中的不合规则成份,一方面可以减轻程序对无用 数据进行不必要的处理. 数据进行不必要的处理.另一方面也可以在某种程度上提高 程序的安全性. 程序的安全性.
创建Input Input过滤器 10.3.2 创建Input过滤器
在定义完过滤与校验规则之后, 在定义完过滤与校验规则之后,就可以创建 Zend_Filter_Input过滤器了.该创建过程只需要为 过滤器了. 过滤器了 Zend_Filter_Input类使用 类使用new关键字实例化对象即可.在实 关键字实例化对象即可. 类使用 关键字实例化对象即可 例化对象时需要指明所定义的过滤与校验规则. 例化对象时需要指明所定义的过滤与校验规则.
第10章 10章
过滤器(Zend_Filter) 过滤器(Zend_Filter)
过滤器( 过滤器(Filter)是对输入内容进行过滤,清除其中不 )是对输入内容进行过滤, 符合过滤规则的内容,并将其余内容返回的过程. 符合过滤规则的内容,并将其余内容返回的过程.过滤器这 一机制广泛应用于Web用户互动程序中,通过过滤器可以对 用户互动程序中, 一机制广泛应用于 用户互动程序中 用户的输入内容进行无害化处理. 用户的输入内容进行无害化处理.最常使用的就是清除指定 内容中的HTML代码,或者其中的回车换行符等.Zend 代码, 内容中的 代码 或者其中的回车换行符等. Framework也提供了对过滤器的支持,使用 也提供了对过滤器的支持, 也提供了对过滤器的支持 使用Zend_Filter组件 组件 即可实现过滤器的功能.本章来介绍Zend Framework中的 即可实现过滤器的功能.本章来介绍 中的 Zend_Filter过滤器组件. 过滤器组件. 过滤器组件
10.2
百度文库
常用的预定义过滤器
过滤内容Alnum 所有非字母或数字的内容 名称 过滤内容 Alpha 所有非字母的内容 BaseName 给定路径所有非文件 名部分 Digits 所有非数值的内容 Dir 给定路径所有非目录 替换HTML标记符:"<"与">" Input 标记符: 部分 HtmlEntities 替换 标记符 与 该过滤器较为特殊,将在10.3小节详细介绍) Int 非整 小节详细介绍) (该过滤器较为特殊,将在 小节详细介绍 数的内容RealPath 所有非规范化的绝对路径名 数的内容 StringToLower 字母全部转换为小写 StringToUpper 字母全部转换为大写 StringTrim字符串首尾的空格 字符串首尾的空格 StripTags 去除字符串的 去除字符串的HTML内容 表10.1中的 中的Alpha, 内容 中的 , StringToLower,StringToUpper过滤器在前两节介绍实例中 , 过滤器在前两节介绍实例中 已经做了介绍.本节将重点介绍剩余的Alnum, 已经做了介绍.本节将重点介绍剩余的 , HtmlEntities,Int与StripTags过滤器.另外,Input过滤器 过滤器. , 与 过滤器 另外, 过滤器 比较特殊,将在本章10.3节中详细介绍.除此之外的过滤器 节中详细介绍. 比较特殊,将在本章 节中详细介绍 使用都非常简单,这里不再赘述. 使用都非常简单,这里不再赘述.
10.1
过滤器的使用方法
对引言中过滤器的基本定义进行延伸, 对引言中过滤器的基本定义进行延伸,过滤器除了清 除内容之外还包括一般化的对输入数据的转化. 除内容之外还包括一般化的对输入数据的转化.作为使用过 滤器的第一步,本节先来介绍过滤器的通常使用方法. 滤器的第一步,本节先来介绍过滤器的通常使用方法.本节 内容包括如何使用单个过滤器与如何使用过滤器链. 内容包括如何使用单个过滤器与如何使用过滤器链.通过本 节的介绍,读者会对如何使用过滤器有一个深刻的认识. 节的介绍,读者会对如何使用过滤器有一个深刻的认识.
Int整型数过滤器 10.2.3 Int整型数过滤器
Zend_Filter过滤器中的 过滤器可以对指定的数值进 过滤器中的Int过滤器可以对指定的数值进 过滤器中的 行整型转换,即将非整部分过滤掉. 行整型转换,即将非整部分过滤掉.该过滤器对要求输入的 内容仅为整数时就非常有用. 内容仅为整数时就非常有用.
HTML过滤器 10.2.2 HtmlEntities HTML过滤器
Zend_Filter_HtmlEntities过滤器可以对给定内容中的 过滤器可以对给定内容中的 HTML代码进行过滤.该过滤器是对 代码进行过滤. 函数: 代码进行过滤 该过滤器是对PHP函数: 函数 htmlentities()进行了封装,所以通过此过滤器的 进行了封装, 进行了封装 所以通过此过滤器的HTML内容 内容 都将被过滤掉. 都将被过滤掉.
实战Zend_Filter_Input 10.3.4 实战Zend_Filter_Input
前面三节为读者介绍了使用Zend_Filter_Input过滤器 过滤器 前面三节为读者介绍了使用 的过程. 的过程.本节通过一个可执行的实例来实际应用一下此过滤 器.
10.4
创建自定义过滤器
通过对10.2节中的常用预定义过滤器的学习可以发现, 节中的常用预定义过滤器的学习可以发现, 通过对 节中的常用预定义过滤器的学习可以发现 Zend_Filter组件中已经预定义了很多常用的过滤器.但是仅 组件中已经预定义了很多常用的过滤器. 组件中已经预定义了很多常用的过滤器 凭这些系统预定义过滤器有时并不能完全满足实际编程环境 的需要.此时, 的需要.此时,用户可以通过自定义过滤器来满足自己更多 的需要. 支持自定义过滤器. 的需要.Zend_Filter支持自定义过滤器.本节就来介绍如何 支持自定义过滤器 实现自定义过滤器. 实现自定义过滤器. 要编写自定义过滤器,需要定义一个类, 要编写自定义过滤器,需要定义一个类,并引用 Zend_Filter_Interface接口.该接口定义了 接口. 方法, 接口 该接口定义了filter()方法,这 方法 个方法可以在用户的类里被实现. 个方法可以在用户的类里被实现.用 Zend_Filter::addFilter()可以把一个实现这个接口的对象添 可以把一个实现这个接口的对象添 加到过滤器链. 加到过滤器链.
10.1.1 使用单个过滤器
Zend_Filter中有一个 中有一个Zend_Filter_Interface子类,该子 子类, 中有一个 子类 类为实现一般过滤器提供了接口.要实现过滤器类, 类为实现一般过滤器提供了接口.要实现过滤器类,需要实 现该接口中一个名为filter()的方法.通过 的方法. 现该接口中一个名为 的方法 通过filter()方法过滤掉 方法过滤掉 指定内容中不需要的部分即可. 指定内容中不需要的部分即可. Zend_Filter中已经事先定义了很多常用的过滤器子类 中已经事先定义了很多常用的过滤器子类 要使用这些过滤器,首先要加载相应的组件, .要使用这些过滤器,首先要加载相应的组件,然后为类实 例化对象,再调用对象的filter()方法即可. 方法即可. 例化对象,再调用对象的 方法即可
Alnum字母或数值过滤器 10.2.1 Alnum字母或数值过滤器
使用Zend_Filter_Alnum过滤器可以对给定内容中的非 过滤器可以对给定内容中的非 使用 数字也非字母的内容进行过滤.通过该过滤器的Filter()方法 数字也非字母的内容进行过滤.通过该过滤器的 方法 将返回纯数字与字母的内容, ,将返回纯数字与字母的内容,除此之外的其他内容都将被 过滤.该过滤器可以看作是过滤器Zend_Filter_Alpha(过 过滤.该过滤器可以看作是过滤器 ( 滤非字母) 滤非字母)与Zend_Filter_Digits(过滤非数值)的并集. (过滤非数值)的并集.
HTML字符过滤器 10.2.4 StripTags HTML字符过滤器
Zend_Filter_StripTags过滤器的作用是将字符串中的 过滤器的作用是将字符串中的 HTML内容进行删除.该过滤器与 内容进行删除. 内容进行删除 该过滤器与Zend_Filter_HtmlEntities 过滤器不同,后者只是将" , 符号进行转换. 过滤器不同,后者只是将"<",">"符号进行转换.而 符号进行转换 Zend_Filter_StripTags过滤器则是直接过滤掉被"<>"符号 过滤器则是直接过滤掉被" 过滤器则是直接过滤掉被 符号 所包括的内容. 所包括的内容.
10.3
Zend_Filter_Input过滤器 Zend_Filter_Input过滤器
在所有的预定义过滤器中, 在所有的预定义过滤器中,Zend_Filter_Input是最为 是最为 特殊的一类过滤器. 特殊的一类过滤器.该过滤器的使用方法与其他过滤器的使 用方法有很大不同, 用方法有很大不同,该过滤器专门用于实现对互动程序中用 户输入数据的过滤.要实现该过滤器通常要分以下几步: 户输入数据的过滤.要实现该过滤器通常要分以下几步: 定义过滤与校验规则. 定义过滤与校验规则. 创建过滤与校验处理器. 创建过滤与校验处理器. 检索处理后的字段与其他报告内容. 检索处理后的字段与其他报告内容. 本节就按照上述使用顺序来详细介绍如何使用 Zend_Filter_Input进行过滤操作.其中提到了关于校验器的 进行过滤操作. 进行过滤操作 知识,关于这部分内容将在本书第派遣11章详细介绍 章详细介绍. 知识,关于这部分内容将在本书第派遣 章详细介绍.
10.3.1 定义过滤与校验规则
在创建一个Zend_Filter_Input类的实例之前,需要为 类的实例之前, 在创建一个 类的实例之前 该过滤器分别创建过滤规则与校验规则数组. 该过滤器分别创建过滤规则与校验规则数组.其中两个数组 的键与值,为需要获取前台表单的表单项名称, 的键与值,为需要获取前台表单的表单项名称,与相应对其 进行处理的子类名称. 进行处理的子类名称. 如对用户输入的用户名进行小写转换(StringToLower 如对用户输入的用户名进行小写转换( ),对用户输入的年龄进行非数值过滤 对用户输入的年龄进行非数值过滤( ).另外 ),对用户输入的年龄进行非数值过滤(Digits).另外, ).另外, 还需要对用户进行是否为字母的校验. 还需要对用户进行是否为字母的校验.
10.3.3 检索处理后的字段与其他内容
在定义了Zend_Filter_Input过滤器之后,就可以通过 过滤器之后, 在定义了 过滤器之后 多种方法来获取其中的各项内容.其中包括无效内容( 多种方法来获取其中的各项内容.其中包括无效内容( Invalid),丢失的内容(Missing)和未知的内容( ),丢失的内容 ),丢失的内容( )和未知的内容( Unknown)等.当然最重要的还是返回经过处理之后的内 ) 容.
10.1.2 使用过滤器链
过滤器除了单个使用之外, 过滤器除了单个使用之外,还可以将多个过滤器串连 起来配合使用.过滤器链就是多个过滤器的一个连接. 起来配合使用.过滤器链就是多个过滤器的一个连接.在对 指定的内容进行过滤时, 指定的内容进行过滤时,每个过滤器将按照其顺序分别进行 过滤或者转化操作.当所有的过滤操作都被进行完时, 过滤或者转化操作.当所有的过滤操作都被进行完时,过滤 器链返回最终的过滤结果. 器链返回最终的过滤结果. 过滤器链与单一的过滤器一样,也可以执行Filter()方 过滤器链与单一的过滤器一样,也可以执行 方 法,调用此方法即可对指定数据进行多重过滤或者转化操作 .