<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 16641 -->
<!-- Reviewed: no -->
<sect1 id="zend.filter.introduction">

    <title>Einführung</title>

    <para>
        Die Zend_Filter Komponente bietet ein Set von normalerweise benötigen Datenfiltern. Sie
        bietet auch einen einfachen Filterketten Mechanismus mit dem mehrere Filter bei einem
        einfachen Wert in einer benutzerdefinierten Reihenfolge ausgeführt werden können.
    </para>

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

        <title>Was ist ein Filter?</title>

        <para>
            In der physikalischen Welt wird ein Filter typischerweise für das entfernen von
            unerwünschten Teilen einer Eingabe verwendet, und der gewünschte Teil der Eingabe wird
            zur Ausgabe des Filters weitergeleitet (z.B. Kaffee). In solchen Szenarien ist ein
            Filter ein Operator der ein Subset von der Eingabe produziert. Diese Art des Filterns
            ist für Web Anwendungen nützlich - entfernen illegaler Eingaben, trimmen von unnötigen
            Leerzeichen, usw.
        </para>

        <para>
            Diese Basisdefinition eines Filter kann erweitert werden um generelle Umwandlungen über
            eine Eingabe zu beinhalten. Eine übliche Umwandlung die in Web Anwendungen durchgeführt
            wird, ist das auskommentieren von HTML Entititäten. Zum Beispiel, wenn ein Formular Feld
            automatisch mit einer unsicheren Eingabe übergeben wird (z.B. von einem Web Browser),
            sollte dieser Wert entweder frei von HTML Entititäten sein oder nur auskommentierte HTML
            Entititäten enthalten, um unerwünschtes Verhalten und Sicherheitslöcher zu vermeiden. Um
            diesen Anforderungen gerecht zu werden müssen HTML Entititäten die in der Eingabe
            vorkommen entweder entfernt oder auskommentiert werden. Natürlich hängt es von der
            Situation ab welcher Weg mehr zutrifft. Ein Filter der HTML Entititäten entfernt
            operiert innerhalb der Beschreibung der ersten Definition von Filter - ein Operator der
            ein Subset von einer Eingabe produziert. Ein Filter der HTML Entititäten auskommentiert,
            wandelt die Eingabe um (z.B. "<code>&amp;</code>" wird umgewandelt in
            "<code>&amp;amp;</code>"). Solche Fälle zu unterstützen ist für Web Entwickler sehr
            wichtig und "zu filtern", im Kontext der Verwendung von Zend_Filter, bedeutet einige
            Umwandlungen über eingabedaten durchzuführen.
        </para>

    </sect2>

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

        <title>Normale Verwendung von Filtern</title>

        <para>
            Diese Filterdefinition bekanntgegeben zu haben bietet die Grundlage für
            <classname>Zend_Filter_Interface</classname>, welches eine einzelne Methode benötigt die
            <code>filter()</code> genannt wird, und von der Filterklasse implementiert werden muß.
        </para>

        <para>
            Nachfolgend ist ein grundsätzliches Beispiel der Verwendung eines Filters über zwei
            Eingabedaten, einem Undzeichen (<code>&amp;</code>) und einem Hochkommazeichen
            (<code>&quot;</code>):

            <programlisting language="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>Verwenden der statischen get() Methode</title>

        <para>
            Wenn es unbequem ist einen gegebene Filterklasse zu Laden und eine Instanz des Filters
            zu erstellen, kann die statische <classname>Zend_Filter::get()</classname> Methode als
            alternativer Aufrufstil verwendet werden. Das erste Argument dieser Methode ist der
            Eingabewert, der die <code>filter()</code> Methode passieren soll. Das zweite Argument
            ist ein String, der dem Basisnamen der Filterklasse, relativ zum Zend_Filter Namensraum,
            entspricht. Die <code>get()</code> Methode läde die Klasse automatisch, erstellt eine
            Instanz, und führt die Eingabedaten der <code>filter()</code> Methode zu.

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

        </para>

        <para>
            Es kann auch ein Array von Konstruktor Argumenten übergeben werden, wen diese für die
            Filterklasse benötigt werden.

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

        </para>

        <para>
            Die statische Verwendung kann für das Ad-Hoc aufrufen von Filtern bequem sein, aber wenn
            man einen Filter über mehrere Eingaben anwenden will ist es effizienter den ersten
            Beispiel von oben zu folgen, eine Instanz des Filter Objekts zu erstellen und dessen
            <code>filter()</code> Methode aufzurufen.
        </para>

        <para>
            Die Zend_Filter_Input Klasse erlaubt es also, mehrere Filter zu instanzieren und
            auszurufen, und wenn benötigt, den Prüfklassen diese Sets von Eingabedaten zu
            verarbeiten. Siehe <xref linkend="zend.filter.input" />.
        </para>

        <sect3 id="zend.filter.introduction.static.namespaces">

            <title>Namespaces</title>

            <para>
                Wenn man mit selbst definierten Filtern arbeitet, dann kann man an
                <methodname>Zend_Filter::get()</methodname> einen vierten Parameter übergeben
                welcher der Namespace ist, an dem der eigene Filter gefunden werden kann.
            </para>

            <programlisting language="php"><![CDATA[
echo Zend_Filter::get(
    '"',
    'MyFilter',
    array($parameters),
    array('FirstNamespace', 'SecondNamespace')
);
]]></programlisting>

            <para>
                <classname>Zend_Filter</classname> erlaubt es auch standardmäßige Namespaces zu
                setzen. Das bedeutet das man Sie einmal in der Bootstrap setzt und sie nicht mehr
                bei jedem Aufruf von <methodname>Zend_Filter::get()</methodname> angeben muß. Der
                folgende Codeschnipsel ist identisch mit dem vorherigen.
            </para>

            <programlisting language="php"><![CDATA[
Zend_Filter::setDefaultNamespaces(array('FirstNamespace', 'SecondNamespace'));
echo Zend_Filter::get('"', 'MyFilter', array($parameters));
echo Zend_Filter::get('"', 'OtherFilter', array($parameters));
]]></programlisting>

            <para>
                Der Bequemlichkeit halber gibt es die folgenden Methoden welche die Behandlung von
                Namespaces erlauben:
            </para>

            <itemizedlist>
                <listitem>
                    <para>
                        <emphasis><methodname>Zend_Filter::getDefaultNamespaces()</methodname></emphasis>:
                        Gibt alle standardmäßigen Namespaces als Array zurück.
                    </para>
                </listitem>

                <listitem>
                    <para>
                        <emphasis><methodname>Zend_Filter::setDefaultNamespaces()</methodname></emphasis>:
                        Setzt neue standardmäßige Namespaces und überschreibt alle vorher
                        gesetzten. Es wird entweder ein String für einen einzelnen Namespace
                        akzeptiert, oder ein Array für mehrere Namespaces.
                    </para>
                </listitem>

                <listitem>
                    <para>
                        <emphasis><methodname>Zend_Filter::addDefaultNamespaces()</methodname></emphasis>:
                        Fügt zusätzliche Namespaces zu den bereits gesetzten hinzu. Es wird
                        entweder ein String für einen einzelnen Namespace akzeptiert, oder ein
                        Array für mehrere Namespaces.
                    </para>
                </listitem>

                <listitem>
                    <para>
                        <emphasis><methodname>Zend_Filter::hasDefaultNamespaces()</methodname></emphasis>:
                        Gibt true zurück wenn ein oder mehrere standardmäßige Namespaces gesetzt
                        sind, und false wenn keine standardmäßigen Namespaces gesetzt sind.
                    </para>
                </listitem>
            </itemizedlist>
        </sect3>
    </sect2>
</sect1>
<!--
vim:se ts=4 sw=4 et:
-->