第 13 章 Zend_Filter

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;

<xi:include></xi:include><xi:include></xi:include>