第 13 章 Zend_Filter

目录

13.1. 简介
13.2. 过滤器链
13.3. 编写过滤器
13.4. Zend_Filter_Input
13.4.1. Declaring Filter and Validator Rules
13.4.2. Creating the Filter and Validator Processor
13.4.3. Retrieving Validated Fields and other Reports
13.4.4. Using Metacommands to Control Filter or Validator Rules
13.4.5. Adding Filter Class Namespaces

13.1. 简介

Zend_Filter组件提供了一系列普遍使用的数据过滤器(data filter)。同时也提供了一个简单的过滤器链机制,使多个过滤器以用户定义的顺序对一个单一的数据进行过滤。

什么是过滤器(filter)?

在现实世界中,过滤器被用来过滤掉输入物中不需要的部分,并期望产出部分输出物(比如,咖啡)。在这样的情景下,过滤器就像是一个操作员,生产出输入物的子集。这种类型的过滤对Web应用程序来说是很有用的-移除非法的输入数据,去除不必要的空格,等等。

这个过滤器基本的定义,可延伸出包括一般化的输入数据的转化。编码HTML实体,是Web应用程序中一个普遍的转化。例如,一个表单字段的值附带着不受信任的数据(比如,来自web浏览器的数据),为了防止不期望的行为发生和安全漏洞,这个值应该不包括HTML实体,或只包含已编码的HTML实体。为了满足这个需求,输入数据中的HTML实体被移除或被编码,当然,这得视具体情况而定。过滤器的第一种定义中就涵盖了过滤器移除HTML实体的意思-操作员生产出输入数据的一个子集。然而,过滤器也可编码HTML实体,转化输入数据(比如,"&"被编码成"&")。为Web开发者支持这样的用例是非常重要的,且在使用Zend_Filter的上下文中,”to filter”的意思是对输入数据执行一些转化。

确立了这样的过滤器定义,为Zend_Filter_Interface接口奠定了理论基础,需要过滤器类实现一个名为filter()的方法。

下面一个简单的例子,示范了在2个输入数据上使用过滤器,"&"符号和双引号(")字符:

<?php
require_once 'Zend/Filter/HtmlEntities.php';
$htmlEntities = new Zend_Filter_HtmlEntities();
echo $htmlEntities->filter('&'); // &amp;
echo $htmlEntities->filter('"'); // &quot;