<sect1 id="zend.filter.introduction">

    <title> 简介 </title>

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

    <sect2 id="zend.filter.introduction.definition">

        <title> 什么是过滤器(filter)？</title>

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

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

    </sect2>

    <sect2 id="zend.filter.introduction.using">

        <title> 过滤器的基本用法 </title>

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

        <para>
            下面一个简单的例子，示范了在2个输入数据上使用过滤器，"<code>&amp;</code>" 符号和双引号 (<code>&quot;</code>) 字符：

            <programlisting role="php"><![CDATA[
$htmlEntities = new Zend_Filter_HtmlEntities();

echo $htmlEntities->filter('&'); // &amp;
echo $htmlEntities->filter('"'); // &quot;
]]>
            </programlisting>

        </para>

    </sect2>

    <sect2 id="zend.filter.introduction.static">

        <title> 使用静态 <code>get()</code> 方法 </title>

        <para>
            如果不方便加载给定的过滤器类和创建过滤器的实例，可以使用静态方法 <code>Zend_Filter::get()</code> 作为备用的调用风格。这个方法的第一个参数是数据输入值，将传递给 <code>filter()</code> 方法，第二个参数是个字符串，对应于过滤器类的基本名，和 Zend_Filter 名称空间有关。<code>get()</code> 方法自动加载这个类，创建一个实例，并应用 <code>filter()</code> 方法给数据输入。

            <programlisting role="php"><![CDATA[
echo Zend_Filter::get('&', 'HtmlEntities');
]]>
            </programlisting>

        </para>

        <para>
            如果过滤器类需要，也可以传递一个数组构造参数

            <programlisting role="php"><![CDATA[
echo Zend_Filter::get('"', 'HtmlEntities', array(ENT_QUOTES));
]]>
            </programlisting>

        </para>

        <para>
            静态用法对调用过滤器特别方便，但如果对多个输入运行过滤器，按上面第一个例子做更有效，创建一个过滤器对象的实例并调用它的 <code>filter()</code> 方法。
        </para>

        <para>
            并且，Zend_Filter_Input 类允许初始化和运行多重过滤器，按需的校验器类来处理输入数据，参见 <xref linkend="zend.filter.input" />。
        </para>

    </sect2>

</sect1>
<!--
vim:se ts=4 sw=4 et:
-->
