Standard Filter Klassen

Zend Framework kommt mit einem Standardset von Filtern, welche bereits zur Verwendung fertig sind.

Alnum

Zend_Filter_Alnum ist ein Filter welche nur alphabetische Zeichen und Ziffern zurückgibt. Alle anderen Zeichen werden unterdrückt.

Unterstützte Optionen für Zend_Filter_Alnum

Die folgenden Optionen werden für Zend_Filter_Alnum unterstützt:

  • allowwhitespace: Wenn diese Option gesetzt wird dann sind Leerzeichen erlaubt. Andernfalls werden Sie unterdrückt. Standardmäßig sind Leerzeichen nicht erlaubt.

Grundsätzliche Verwendung

Das folgende Beispiel zeigt das Standardverhalten dieses Filters.

$filter = new Zend_Filter_Alnum();
$return = $filter->filter('This is (my) content: 123');
// Gibt 'Thisismycontent123' zurück

Das oben stehende Beispiel gibt 'Thisismycontent123' zurück. Wie man sehen kann werden alle Leerzeichen und auch die Klammern gefiltert.

Anmerkung

Zend_Filter_Alnum arbeitet auf fast allen Sprachen. Aber aktuell gibt es drei Ausnahmen: Chinesisch, Japanisch und Koreanisch. In diesen Sprachen wird statt dessen das englische Alphabeth statt den Zeichen dieser Sprache verwendet. Die Sprache selbst wird durch Verwendung von Zend_Locale erkannt.

Leerzeichen erlauben

Zend_Filter_Alnum kann auch Leerzeichen erlauben. Das kann nützlich sein wenn man spezielle Zeichen von einem Text entfernen will. Siehe das folgende Beispiel:

$filter = new Zend_Filter_Alnum(array('allowwhitespace' => true));
$return = $filter->filter('This is (my) content: 123');
// Gibt 'This is my content 123' zurück

Das obige Beispiel gibt 'This is my content 123' zurück. Wie man sieht werden nur die Klammern gefiltert wobei die Leerzeichen nicht angefasst werden.

Am allowWhiteSpace im Nachhinein zu ändern kann man setAllowWhiteSpace und getAllowWhiteSpace verwenden.

Alpha

Zend_Filter_Alpha ist ein Filter der den String $value zurückgibt, wobei er alle Zeichen entfernt die keine alphabetischen Zeichen sind. Dieser Filter enthält eine Option welche Leerzeichen erlaubt.

Unterstützte Optionen für Zend_Filter_Alpha

Die folgenden Optionen werden für Zend_Filter_Alpha unterstützt:

  • allowwhitespace: Wenn diese Option gesetzt wird dann werden Leerzeichen erlaubt. Andernfalls werden Sie unterdrückt. Standardmäßig sind Leerzeichen nicht erlaubt.

Einfache Verwendung

Ein einfaches Beispiel der Verwendung ist anbei:

$filter = new Zend_Filter_Alpha();

print $filter->filter('Das ist (mein) Inhalt: 123');

Das obige Beispiel gibt 'DasistmeinInhalt' zurück. Es sollte beachtet werden dass Leerzeichen und Klammern entfernt werden.

Anmerkung

Zend_Filter_Alpha arbeitet mit den meisten Sprachen; trotzdem gibt es drei Ausnahmen: Chinesisch, Japanisch und Koreanisch. Bei diesen Sprachen wird das englische Alphabeth verwenden. Die Sprache wird durch die Verwendung von Zend_Locale erkannt.

Leerzeichen erlauben

Zend_Filter_Alpha kann auch Leerzeichen erlauben. Dies kann nützlich sein wenn man spezielle Zeichen von einem Statz entfernen will. Siehe das folgende Beispiel:

$filter = new Zend_Filter_Alpha(array('allowwhitespace' => true));

print $filter->filter('Das ist (mein) Inhalt: 123');

Das oben stehende Beispiel gibt 'Das ist mein Inhalt ' zurück. Es ist zu beachten das alle Klammern, Doppelpunkte und Zahlen entfernt werden während die Leerzeichen bleiben.

Um allowWhiteSpace nach der Instanziierung zu ändern kann die Methode setAllowWhiteSpace() verwendet werden.

Um den aktuellen Wert von allowWhiteSpace zu erhalten kann die Methode getAllowWhiteSpace() verwendet werden.

BaseName

Zend_Filter_BaseName erlaubt es einen String zu filtern welcher den Pfad zu einer Daten enthält und gibt den Basisnamen dieser Datei zurück.

Unterstützte Optionen für Zend_Filter_BaseName

Es gibt keine zusätzlichen Optionen für Zend_Filter_BaseName.

Einfache Verwendung

Ein einfaches Beispiel der Verwendung ist nachfolgend zu finden:

$filter = new Zend_Filter_BaseName();

print $filter->filter('/vol/tmp/filename');

Das gibt 'filename' zurück.

$filter = new Zend_Filter_BaseName();

print $filter->filter('/vol/tmp/filename.txt');

Das gibt 'filename.txt' zurück.

Boolean

Dieser Filter ändert eine gegebene Eingabe auf einen BOOLEAN Wert. Das ist oft nützlich wenn man mit Datenbanken arbeitet oder wenn Formularwerte bearbeitet werden.

Standardverhalten von Zend_Filter_Boolean

Standardmäßig arbeitet dieser Filter indem er Eingabe auf BOOLEAN Werte castet; in anderen Worte, er arbeitet in ähnlicher Weise wie der Aufruf von (boolean) $value.

$filter = new Zend_Filter_Boolean();
$value  = '';
$result = $filter->filter($value);
// gibt false zurück

Dies bedeuetet dass Zend_Filter_Boolean ohne die Angabe einer Konfiguration alle Eingabetypen akteptiert und ein BOOLEAN zurückgibt wie man es durch Typcasting zu BOOLEAN erhält.

Das Verhalten von Zend_Filter_Boolean ändern

Manchmal ist das Casten mit (boolean) nicht ausreichend. Zend_Filter_Boolean erlaubt es spezifische Typen zu konfigurieren welche konvertiert werden, und jene die ignoriert werden.

Die folgenden Typen können behandelt werden:

  • boolean: Gibt einen boolschen Wert so wie er ist zurück.

  • integer: Konvertiert den Integerwert 0 zu FALSE.

  • float: Konvertiert den Gleitkommawert 0.0 zu FALSE.

  • string: Konvertiert einen leeren String '' zu FALSE.

  • zero: Konvertiert einen String der ein einzelnes Null Zeichen ('0') enthält zu FALSE.

  • empty_array: Konvertiert ein leeres array zu FALSE.

  • null: Konvertiert den Wert NULL zu FALSE.

  • php: Konvertiert Werte so wie diese mit PHP zu BOOLEAN konvertiert werden.

  • false_string: Konvertiert einen String der das Wort "false" enthält zu einem boolschen FALSE.

  • yes: Konvertiert einen lokalisierten String welcher das Wort "nein" enthält zu FALSE.

  • all: Konvertiert alle obigen Typen zu BOOLEAN.

Alle anderen angegebenen Werte geben standardmäßig TRUE zurück.

Es gibt verschiedene Wege um auszuwählen welche der oben stehenden Typen gefiltert werden. Man kann ein oder mehrere Typen angeben und Sie hinzufügen, man kann ein Array angeben, man kann die Konstanten verwenden, oder man kann einen textuellen String angeben. Siehe die folgenden Beispiele:

// Konvertiert 0 zu false
$filter = new Zend_Filter_Boolean(Zend_Filter_Boolean::INTEGER);

// Konvertiert 0 und '0' zu false
$filter = new Zend_Filter_Boolean(
    Zend_Filter_Boolean::INTEGER + Zend_Filter_Boolean::ZERO
);

// Konvertiert 0 und '0' zu false
$filter = new Zend_Filter_Boolean(array(
    'type' => array(
        Zend_Filter_Boolean::INTEGER,
        Zend_Filter_Boolean::ZERO,
    ),
));

// Konvertiert 0 und '0' zu false
$filter = new Zend_Filter_Boolean(array(
    'type' => array(
        'integer',
        'zero',
    ),
));

Man kann auch eine Instanz von Zend_Config angeben um die gewünschten Typen zu setzen. Um Typen nach der Instanzierung zu setzen kann die Methode setType() verwendet werden.

Lokalisierte Boolsche Werte

Wie vorher erwähnt erkennt Zend_Filter_Boolean auch die lokalisierten Strings für "Ja" und "Nein". Das bedeutet das man den Kunden in einem Formular nach "Ja" oder "Nein" in seiner eigenen Sprache fragen kann und Zend_Filter_Boolean die Antworten zu richtigen boolschen Werten konvertieren wird.

Um das gewünschte Gebietsschema zu setzen kann man entweder die Option locale verwenden oder die Methode setLocale() verwenden.

$filter = new Zend_Filter_Boolean(array(
    'type'   => Zend_Filter_Boolean::ALL,
    'locale' => 'de',
));

// Gibt false zurück
echo $filter->filter('nein');

$filter->setLocale('en');

// Gibt true zurück
$filter->filter('yes');

Casten ausschalten

Machmal ist es nützlich nur TRUE oder FALSE zu erkennen und alle anderen Werte ohne Änderung zurückzugeben. Zend_Filter_Boolean erlaubt dies indem die Option casting auf FALSE gesetzt wird.

In diesem Fall arbeitet Zend_Filter_Boolean wie in der folgenden Tabelle beschrieben, die zeigt welche Werte TRUE oder FALSE zurückgeben. Alle anderen angegebenen Werte werden ohne Änderung zurückgegeben wenn casting auf FALSE gesetzt wird.

Tabelle 73. Verwendung ohne Casten

Typ True False
Zend_Filter_Boolean::BOOLEAN TRUE FALSE
Zend_Filter_Boolean::INTEGER 0 1
Zend_Filter_Boolean::FLOAT 0.0 1.0
Zend_Filter_Boolean::STRING ""  
Zend_Filter_Boolean::ZERO "0" "1"
Zend_Filter_Boolean::EMPTY_ARRAY array()  
Zend_Filter_Boolean::NULL NULL  
Zend_Filter_Boolean::FALSE_STRING "false" (unabhängig von der Schreibweise) "true" (unabhängig von der Schreibweise)
Zend_Filter_Boolean::YES localized "yes" (unabhängig von der Schreibweise) localized "no" (unabhängig von der Schreibweise)

Das folgende Beispiel zeigt das Verhalten wenn die Option casting verändert wird:

$filter = new Zend_Filter_Boolean(array(
    'type'    => Zend_Filter_Boolean::ALL,
    'casting' => false,
));

// Gibt false zurück
echo $filter->filter(0);

// Gibt true zurück
echo $filter->filter(1);

// Gibt den Wert zurück
echo $filter->filter(2);

Callback

Dieser Filter erlaubt es einem eigene Methoden in Verbindung mit Zend_Filter zu verwenden. Man muß keinen neuen Filter erstellen wenn man bereits eine Methode hat die diesen Job erledigt.

Nehmen wir an das wir einen Filter erstellen wollen der einen String umdreht.

$filter = new Zend_Filter_Callback('strrev');

print $filter->filter('Hello!');
// Ausgabe "!olleH"

Wie man sehen kann ist es wirklich sehr einfach ein Callback zu verwenden um einen eigenen Filter zu definieren. Es ist auch möglich eine Methode zu verwenden, wenn diese innerhalb einer Klasse definiert ist, indem ein Array als Callback angegeben wird.

// Unsere Klassendefinition
class MyClass
{
    public function Reverse($param);
}

// Die Filter Definition
$filter = new Zend_Filter_Callback(array('MyClass', 'Reverse'));
print $filter->filter('Hello!');

Um den aktuell gesetzten Callback zu erhalten kann getCallback() verwendet werden, und um einen anderen Callback zu setzen kann setCallback() verwendet werden.

Es ist auch möglich Standardparameter zu definieren, die der aufgerufenen Methode als Array übergeben werden wenn der Filter ausgeführt wird. Dieses Array wird mit dem Wert der gefiltert werden soll zusammengehängt.

$filter = new Zend_Filter_Callback(
    array(
        'callback' => 'MyMethod',
        'options'  => array('key' => 'param1', 'key2' => 'param2')
    )
);
$filter->filter(array('value' => 'Hello'));

Wenn man die oben stehende Methodendefinition manuell aufrufen würde, dann würde das wie folgt aussehen:

$value = MyMethod('Hello', 'param1', 'param2');

Anmerkung

Man sollte auch beachten das die Definition einer Callback Methode, welche nicht aufgerufen werden kann, eine Exception auslöst.

Compress und Decompress

Diese zwei Filter sind in der Lage Strings, Dateien und Verzeichnisse zu komprimieren und zu dekomprimieren. Sie verwenden Adapter und unterstützen die folgenden Kompressions Formate:

  • Bz2

  • Gz

  • Lzf

  • Rar

  • Tar

  • Zip

Jedes Kompressions Format hat unterschiedliche Fähigkeiten die anbei beschrieben sind. Alle Kompressions Filter können fast der selben Art und Weise verwendet werden, und unterscheiden sich primär in den vorhandenen Optionen und der Art der Kompression welche diese anbieten (beide bieten Algorithmen für Strings vs. Dateien vs. Verzeichnisse an)

Generelle Handhabung

Um einen Kompressions Filter zu erstellen muss man das Kompressions Format auswählen welches man verwenden will. Die folgende Beschreibung nimmt den Bz2 Adapter. Details für alle anderen Adapter werden nach dieser Sektion beschrieben.

Diese zwei Filter sind grundsätzlich identisch, da Sie das gleiche Backend verwenden. Zend_Filter_Compress sollte verwendet werden wenn man Elemente komprimieren will, und Zend_Filter_Decompress sollte verwendet werden wenn man Elemente dekomprimieren will.

Wenn man zum Beispiel einen String komprimieren will, müssen wir Zend_Filter_Compress instanziieren und den gewünschten Adapter angeben.

$filter = new Zend_Filter_Compress('Bz2');

Um einen anderen Adapter zu verwenden muss dieser einfach im Constructor spezifiziert werden.

Man kann auch ein Array von Optionen oder ein Zend_Config Objekt anbieten. Wenn man das tut sollte mindestens der Schlüssel "adapter" angegeben werden, und anschließend entweder der Schlüssel "options" oder "adapterOptions" (welches ein Array von Optionen ein sollte das dem Adapter bei der Instanziierung übergeben wird).

$filter = new Zend_Filter_Compress(array(
    'adapter' => 'Bz2',
    'options' => array(
        'blocksize' => 8,
    ),
));

Standardmäßiger Kompressions Adapter

Wenn kein Kompressions Adapter angegeben wird, dann wird der Gz Adapter verwendet.

Fast die gleiche Verwendung ist die Dekomprimierung eines Strings. Wir müssen in diesem Fall nur den Dekompressions Filter verwenden.

$filter = new Zend_Filter_Decompress('Bz2');

Um einen komprimierten String zu erhalten muss der originale String angegeben werden. Der gefilterte Wert ist die komprimierte Version des originalen Strings.

$filter     = new Zend_Filter_Compress('Bz2');
$compressed = $filter->filter('Uncompressed string');
// Gibt den komprimierten String zurück

Dekomprimierung funktioniert auf die gleiche Weise.

$filter     = new Zend_Filter_Decompress('Bz2');
$compressed = $filter->filter('Compressed string');
// Gibt den dekomprimierten String zurück

Hinweis zur Komprimierung von Strings

Nicht alle Adapter unterstützen die Kompression von Strings. Kompressions Formate wie Rar können nur Dateien und Verzeichnisse verarbeiten. Für Details muss man in die Sektion für den Adapter gesehen werden den man verwenden will.

Ein Archiv erstellen

Die Erstellung einer Archivedatei arbeitet fast auf die gleiche Weise wie die Komprimierung eines Strings. Trotzdem benötigen wir in diesem Fall einen zusätzlichen Parameter welcher den Namen des Archivs enthält welches wir erstellen wollen.

$filter     = new Zend_Filter_Compress(array(
    'adapter' => 'Bz2',
    'options' => array(
        'archive' => 'filename.bz2',
    ),
));
$compressed = $filter->filter('Uncompressed string');
// Gibt bei Erfolg true zurück und erstellt die Archiv Datei

Im obigen Beispeil wird der unkomprimierte String komprimiert, und wird dann in die angegebene Archiv Datei geschrieben.

Existierende Archive werden überschrieben

Der Inhalt einer existierenden Datei wird überschrieben wenn der angegebene Dateiname des Archivs bereits existiert.

Wenn man eine Datei komprimieren will, dann muss man den Namen der Datei mit dessen Pfad angeben.

$filter     = new Zend_Filter_Compress(array(
    'adapter' => 'Bz2',
    'options' => array(
        'archive' => 'filename.bz2'
    ),
));
$compressed = $filter->filter('C:\temp\compressme.txt');
// Gibt bei Erfolg true zurück und erstellt die Archiv Datei

Man kann auch ein Verzeichnis statt einem Dateinamen spezifizieren. In diesem Fall wird das gesamte Verzeichnis mit allen seinen Dateien und Unterverzeichnissen in das Archiv komprimiert.

$filter     = new Zend_Filter_Compress(array(
    'adapter' => 'Bz2',
    'options' => array(
        'archive' => 'filename.bz2'
    ),
));
$compressed = $filter->filter('C:\temp\somedir');
// Gibt bei Erfolg true zurück und erstellt die Archiv Datei

Keine großen oder Basisverzeichnisse komprimieren

Man sollte niemals große oder Basisverzeichnisse wie eine komplette Partition komprimieren. Die Komprimierung einer kompletten Partition ist ein sehr Zeitintensiver Task welcher zu massiven Problemen auf dem Server führen kann, wenn es nicht genug Platz gibt, oder das eigene Skript zu viel Zeit benötigt.

Ein Archiv dekomprimieren

Die Dekomprimierung einer Archivdatei arbeitet fast wie dessen Komprimierung. Man muss entweder die Eigenschaft archive spezifizieren, oder den Dateinamen des Archivs angeben wenn man die Datei dekomprimiert.

$filter     = new Zend_Filter_Decompress('Bz2');
$compressed = $filter->filter('filename.bz2');
// Gibt bei Erfolg true zurück und dekomprimiert die Archiv Datei

Einige Adapter unterstützen die Dekomprimierung des Archivs in ein anderes Unterverzeichnis. In diesem Fall kann der Parameter target spezifiziert werden.

$filter     = new Zend_Filter_Decompress(array(
    'adapter' => 'Zip',
    'options' => array(
        'target' => 'C:\temp',
    )
));
$compressed = $filter->filter('filename.zip');
// Gibt bei Erfolg true zurück und dekomprimiert die Archiv Datei
// in das angegebene Zielverzeichnis

Verzeichnisse in welche extrahiert werden soll müssen existieren

Wenn man ein Archiv in ein Verzeichnis dekomprimieren will, dann muss dieses Verzeichnis existieren.

Bz2 Adapter

Der Bz2 Adapter kann folgendes komprimieren und dekomprimieren:

  • Strings

  • Dateien

  • Verzeichnisse

Dieser Adapter verwendet PHP's Bz2 Erweiterung.

Um die Komprimierung anzupassen unterstützt dieser Adapter die folgenden Optionen:

  • Archive: Dieser Parameter setzt die Archivdatei welche verwendet oder erstellt werden soll.

  • Blocksize: Dieser Parameter setzt die Blockgröße welche zu verwenden ist. Diese kann zwischen '0' und '9' liegen. Der Standardwert ist '4'.

Alle Optionen können bei der Instanziierung oder durch Verwendung der betreffenden Methode verwendet werden. Zum Beispiel sind die zu 'Blocksize' gehörenden Methoden getBlocksize() und setBlocksize(). Man kann auch die setOptions() Methode verwenden welche alle Optionen als Array akzeptiert.

Gz Adapter

Der Gz Adapter kann folgendes komprimieren und dekomprimieren:

  • Strings

  • Dateien

  • Verzeichnisse

Dieser Adapter verwendet PHP's Zlib Erweiterung.

Um die Komprimierung anzupassen unterstützt dieser Adapter die folgenden Optionen:

  • Archive: Dieser Parameter setzt die Archivdatei welche verwendet oder erstellt werden soll.

  • Level: Das Level der Kompression welches verwendet werden soll. Es kann zwischen '0' und '9' liegen. Der Standardwert ist '9'.

  • Mode: Es gibt zwei unterstützte Modi. 'compress' und 'deflate'. Der Standardwert ist 'compress'.

Alle Optionen können bei der Instanziierung oder durch Verwendung der betreffenden Methode verwendet werden. Zum Beispiel sind die zu 'Level' gehörenden Methoden getLevel() und setLevel(). Man kann auch die setOptions() Methode verwenden welche alle Optionen als Array akzeptiert.

Lzf Adapter

Der Lzf Adapter kann folgendes komprimieren und dekomprimieren:

  • Strings

Lzf unterstützt nur Strings

Der Lzf Adapter kann keine Dateien oder Verzeichnisse verarbeiten.

Dieser Adapter verwendet PHP's Lzf Erweiterung.

Es sind keine Optionen vorhanden um diesen Adapter anzupassen.

Rar Adapter

Der Rar Adapter kann folgendes komprimieren und dekomprimieren:

  • Dateien

  • Verzeichnisse

Rar unterstützt keine Strings

Der Rar Adapter kann keine Strings verarbeiten.

Dieser Adapter verwendet PHP's Rar Erweiterung.

Die Kompression wird von Rar nicht unterstützt

Durch Beschränkungen des Kompressions Formats von Rar, gibt es keine frei erhältliche Komprimierung. Wenn man Dateien in ein neues Rar Archiv komprimieren will, muss man dem Adapter einen Callback anbieten mit dem ein Rar Kompressions Programm aufgerufen wird.

Um die Komprimierung anzupassen unterstützt dieser Adapter die folgenden Optionen:

  • Archive: Dieser Parameter setzt die Archivdatei welche verwendet oder erstellt werden soll.

  • Callback: Ein Callback welcher diesem Adapter Unterstützung für Komprimierung anbietet.

  • Password: Das Passwort welches für die Dekomprimierung verwendet werden soll.

  • Target: Das Ziel zu dem dekomprimierte Dateien geschrieben werden.

Alle Optionen können bei der Instanziierung oder durch Verwendung der betreffenden Methode verwendet werden. Zum Beispiel sind die zu 'Target' gehörenden Methoden getTarget() und setTarget(). Man kann auch die setOptions() Methode verwenden welche alle Optionen als Array akzeptiert.

Tar Adapter

Der Rar Adapter kann folgendes komprimieren und dekomprimieren:

  • Dateien

  • Verzeichnisse

Tar unterstützt keine Strings

Der Tar Adapter kann keine Strings verarbeiten.

Dieser Adapter verwendet PEAR's Archive_Tar Komponente.

Um die Komprimierung anzupassen unterstützt dieser Adapter die folgenden Optionen:

  • Archive: Dieser Parameter setzt die Archivdatei welche verwendet oder erstellt werden soll.

  • Mode: Ein Modus der für die Komprimierung verwendet werden soll. Unterstützt werden entweder 'NULL', was keine Komprimierung bedeutet, 'Gz' was PHP's Zlib Erweiterung verwendet, und 'Bz2' was PHP's Bz2 Erweiterung verwendet. Der Standardwert ist 'NULL'.

  • Target: Das Ziel zu dem dekomprimierte Dateien geschrieben werden.

Alle Optionen können bei der Instanziierung oder durch Verwendung der betreffenden Methode verwendet werden. Zum Beispiel sind die zu 'Target' gehörenden Methoden getTarget() und setTarget(). Man kann auch die setOptions() Methode verwenden welche alle Optionen als Array akzeptiert.

Verwendung von Verzeichnissen

Wenn Verzeichnisse mit Tar komprimiert werden, dann wird der komplette Dateipfad verwendet. Das bedeutet das erstellte Tar Dateien nicht nur das Unterverzeichnis sondern den kompletten Pfad für die komprimierten Dateien enthält.

Zip Adapter

Der Rar Adapter kann folgendes komprimieren und dekomprimieren:

  • Strings

  • Dateien

  • Verzeichnisse

Zip unterstützt die Dekomprimierung von Strings nicht

Der Zip Adapter kann die Dekomprimierung von Strings nicht verarbeiten; eine Dekomprimierung wird immer in eine Datei geschrieben.

Dieser Adapter verwendet PHP's Zip Erweiterung.

Um die Komprimierung anzupassen unterstützt dieser Adapter die folgenden Optionen:

  • Archive: Dieser Parameter setzt die Archivdatei welche verwendet oder erstellt werden soll.

  • Target: Das Ziel zu dem dekomprimierte Dateien geschrieben werden.

Alle Optionen können bei der Instanziierung oder durch Verwendung der betreffenden Methode verwendet werden. Zum Beispiel sind die zu 'Target' gehörenden Methoden getTarget() und setTarget(). Man kann auch die setOptions() Methode verwenden welche alle Optionen als Array akzeptiert.

Decrypt

Dieser Filter verschlüsselt beliebige Strings mit den angegebenen Einstellungen. Hierfür verwendet er Adapter. Aktuell gibt es Adapter für die Mcrypt und OpenSSL Erweiterungen von PHP.

Für Details darüber wie man Inhalte verschlüsselt siehe den Encrypt Filter. Da die Grundlegenden Dinge beim Encrypt Filter behandelt werden, beschreiben wir hier nur mehr die zusätzlichen Methoden und Änderungen für die Entschlüsselung.

Entschlüsselung mit Mcrypt

Für die Entschlüsselung von Inhalten die vorher mit Mcrypt verschlüsselt wurden muß man die Optionen wissen mit denen die Verschlüsselung aufgerufen wurde.

Es gibt einen wichtigen Unterschied. Wenn man bei der Verschlüsselung keinen Vektor angegeben hat, muß man Ihn nach der Verschlüsselung des Inhalts holen indem die getVector() Methode am Verschlüsselungs-Filter aufgerufen wird. Ohne den richtigen Vektor ist man nicht in der Lage den Inhalt zu entschlüsseln.

Sobald man alle Optionen angegeben hat ist die Entschlüsselung so einfach wie die Verschlüsselung.

// Verwende die Standardmäßigen Blowfish Einstellungen
$filter = new Zend_Filter_Decrypt('myencryptionkey');

// Setze den Vektor mit dem der Inhalt verschlüsselt wurde
$filter->setVector('myvector');

$decrypted = $filter->filter('encoded_text_normally_unreadable');
print $decrypted;

Anmerkung

Man sollte beachten das man eine Ausnahme erhält wenn die Mcrypt Erweiterung in der eigenen Umgebung nicht vorhanden ist.

Anmerkung

Man sollte ausserdem beachten das alle Einstellungen geprüft werden wenn man die Instanz erstellt oder wenn man setEncryption() aufruft. Wenn Mcrypt ein Problem mit den Einstellungen erkennt wird eine Ausnahme geworfen.

Entschlüsselung mit OpenSSL

Entschlüsselung mit OpenSSL ist so einfach die Verschlüsseln. Aber man benötigt alle Daten von der Person die den Inhalt verschlüsselt hat.

Für die Entschlüsselung mit OpenSSL benötigt man:

  • private: Den eigenen privaten Schlüssel der für die Entschlüsselung des Inhalts verwendet wird. Der private Schlüssel kann ein Dateiname mit einem Pfad zur Schlüsseldatei sein, oder einfach der Inhalt der Schlüsseldatei selbst.

  • envelope: Der verschlüsselte Umschlagschlüssel vom Benutzer der den Inhalt verschlüsselt hat. Man kann entweder den Pfad mit dem Dateinamen zur Schlüsseldatei angeben, oder den Inhalt der Schlüsseldatei selbst. Wenn die package Option gesetzt wurde, kann man diesen Parameter unterdrücken.

  • package: Ob der Umschlagschlüssel mit dem verschlüsselten Wert gepackt werden soll. Der Standardwert ist FALSE.

// Verwende openssl und gib einen privaten Schlüssel an
$filter = new Zend_Filter_Decrypt(array(
    'adapter' => 'openssl',
    'private' => '/path/to/mykey/private.pem'
));

// natürlich kann man den Umschlagschlüssel auch bei der Instanziierung angeben
$filter->setEnvelopeKey(array(
    '/key/from/encoder/first.pem',
    '/key/from/encoder/second.pem'
));

Anmerkung

Beachte das der OpenSSL Adapter nicht funktionieren wird wenn man keine gültigen Schlüssel angibt.

Optional könnte es notwendig sein die Passphrase für die Entschlüsselung der Schlüssel selbst anzugeben indem die setPassphrase() Methode verwendet wird.

// Verwende openssl und gib einen privaten Schlüssel an
$filter = new Zend_Filter_Decrypt(array(
    'adapter' => 'openssl',
    'private' => '/path/to/mykey/private.pem'
));

// natürlich kann man den Umschlagschlüssel auch bei der Instanziierung angeben
$filter->setEnvelopeKey(array(
    '/key/from/encoder/first.pem',
    '/key/from/encoder/second.pem'
));
$filter->setPassphrase('mypassphrase');

Zum Schluß kann der Inhalt entschlüsselt werden. Unser komplettes Beispiel für den vorher verschlüsselten Inhat sieht nun wie folgt aus.

// Verwende openssl und gib einen privaten Schlüssel an
$filter = new Zend_Filter_Decrypt(array(
    'adapter' => 'openssl',
    'private' => '/path/to/mykey/private.pem'
));

// natürlich kann man den Umschlagschlüssel auch bei der Instanziierung angeben
$filter->setEnvelopeKey(array(
    '/key/from/encoder/first.pem',
    '/key/from/encoder/second.pem'
));
$filter->setPassphrase('mypassphrase');

$decrypted = $filter->filter('encoded_text_normally_unreadable');
print $decrypted;

Digits

Gibt den String $value zurück und entfernt alle ausser Ziffern.

Unterstützte Optionen für Zend_Filter_Digits

Es gibt keine zusätzlichen Optionen für Zend_Filter_Digits.

Einfache Verwendung

Ein einfaches Beispiel der Verwendung ist nachfolgend zu finden:

$filter = new Zend_Filter_Digits();

print $filter->filter('October 2009');

Dies gibt "2009" zurück.

$filter = new Zend_Filter_Digits();

print $filter->filter('HTML 5 für Dummies');

Dies gibt "5" zurück.

Dir

Ein angegebener String welcher den Pfad zu einer Datei enthält wird von dieser Funktion nur den Namen des Verzeichnisses zurückgeben.

Unterstützte Optionen für Zend_Filter_Dir

Es gibt keine zusätzlichen Optionen für Zend_Filter_Dir.

Einfache Verwendung

Ein einfaches Beispiel der Verwendung ist nachfolgend zu finden:

$filter = new Zend_Filter_Dir();

print $filter->filter('/etc/passwd');

Dies gibt "/etc" zurück.

$filter = new Zend_Filter_Dir();

print $filter->filter('C:/Temp/x');

Dies gibt "C:/Temp" zurück.

Encrypt

Dieser Filter verschlüsselt beliebige Strings mit den angegebenen Einstellungen. Hierfür verwendet er Adapter. Aktuell gibt es Adapter für die Mcrypt und OpenSSL Erweiterungen von PHP.

Da diese zwei Verschlüsselungs-Methodologien komplett unterschiedlich arbeiten, ist auch die Verwendung der Adapters unterschiedlich. Man muß die Adapter den man verwenden will, bei der Initialisierung des Filters auswählen.

// Verwenden des Mcrypt Adapters
$filter1 = new Zend_Filter_Encrypt(array('adapter' => 'mcrypt'));

// Verwendung des OpenSSL Adapters
$filter2 = new Zend_Filter_Encrypt(array('adapter' => 'openssl'));

Um einen anderen Adapter zu setzen kann man auch setAdapter() verwenden, und die getAdapter() Methode um den aktuell gesetzten Adapter zu erhalten.

// Verwenden des Mcrypt Adapters
$filter = new Zend_Filter_Encrypt();
$filter->setAdapter('openssl');

Anmerkung

Wenn man die adapter Option nicht angibt oder setAdapter nicht verwendet, dann wird standardmäßig der Mcrypt Adapter verwendet.

Verschlüsselung mit Mcrypt

Wenn man die Mcrypt Erweiterung installiert hat, kann man den Mcrypt Adapter verwenden. Dieser Adapter unterstützt bei der Initialisierung die folgenden Optionen:

  • key: Der Verschlüsselungs-Schlüssel mit dem die Eingabe verschlüsselt wird. Man benötigt den gleichen Schlüssel für die Entschlüsselung.

  • algorithm: Der Algorithmus der verwendet werden soll. Das sollte einer der Algorithmus Cipher sein die man unter PHP's Mcrypt Cipers finden kann. Wenn er nicht gesetzt wird, ist er standardmäßig 'blowfish'.

  • algorithm_directory: Das Verzeichnis in dem der Algorithmus gefunden werden kann. Wenn es nicht gesetzt wird, ist es standardmäßig der Pfad der in der Mcrypt Erweiterung gesetzt wurde.

  • mode: Der Verschlüsselungs Modus der verwendet werden soll. Es sollte einer der Modi sein der unter PHP's Mcrypt Modi gefunden werden kann. Wenn er nicht gesetzt wird, ist er standardmäßig 'cbc'.

  • mode_directory: Der Verzeichnis in dem der Modus gefunden werden kann. Wenn es nicht gesetzt wird, ist es standardmäßig der Pfad der in der Mcrypt Erweiterung gesetzt wurde.

  • vector: Der Initialisierungs Vektor der verwendet werden soll. Wenn er nicht gesetzt wird, wird ein zufälliger Vektor verwende.

  • salt: Ob der Schlüssel als Salt Wert verwendet wird. Der Schlüssel der für die Verschlüsselung verwendet wird, wird selbst auch verschlüsselt. Der Standardwert ist FALSE.

  • compression: Ob der verschlüsselte Wert komprimiert werden soll. Der Standard ist nicht komprimiert. Für Details sehen Sie unter Komprimierung für Openssl nach.

Wenn man einen String statt einem Array übergibt, wird dieser String als key Option verwendet.

Man kan die Verschlüsselungswerte auch im Nachhinein mit den Methoden getEncryption() und setEncryption() erhalten und setzen.

Anmerkung

Es ist zu beachten das man eine Ausnahme erhält wenn die mcrypt Erweiterung in der eigenen Umgebung nicht vorhanden ist.

Anmerkung

Man sollte auch beachten das alle Einstellungen geprüft werden wenn man eine Instanz erstellt oder setEncryption() aufruft. Wenn mcrypt ein Problem mit diesen Einstellungen erkennt wird eine Ausnahme geworfen.

Man kann den Verschlüsselungs Vektor durch den Aufruf von getVector() und setVector() erhalten und setzen. Ein engegebener String wird, je nach benötigter Vektorgröße des verwendeten Algorithmus, abgeschnitten oder aufgefüllt.

Anmerkung

Es ist zu beachten das, wenn man keinen eigenen Vektor setzt, man den Vektor holen und speichern muß. Andernfalls ist man nicht in der Lage den verschlüsselten String wieder zu dekodieren.

// Verwendet die standardmäßigen Blowfish Einstellungen
$filter = new Zend_Filter_Encrypt('myencryptionkey');

// Setzt einen eigenen Vektor, andernfalls muß man getVector()
// ausrufen und diesen Vektor für spätere Entschlüsselung speichern
$filter->setVector('myvector');
// $filter->getVector();

$encrypted = $filter->filter('text_to_be_encoded');
print $encrypted;

// Für Entschlüsselung siehe den Decrypt Filter

Verschlüsselung mit OpenSSL

Wenn man die OpenSSL Erweiterung installiert hat, kann man den OpenSSL Adapter verwenden. Dieser Adapter unterstützt bei der Instanziierung die folgenden Optionen:

  • public: Der öffentliche Schlüssel des Benutzer dem man verschlüsselte Inhalte zur Verfügung stellen will. Man kann mehrere öffentliche Schlüssel angeben indem man ein Array verwendet. Man kann entweder den Pfad und den Dateinamen der Schlüsseldatei angeben, oder nur den Inhalt der Schlüseldatei selbst.

  • private: Der eigene private Schlüssel der für die Verschlüsselung des Inhalts verwendet wird. Auch der private Schlüssel kann entweder ein Dateiname mit Pfad zur Schlüsseldatei sein, oder nur der Inhalt der Schlüsseldatei selbst.

  • compression: Ob der verschlüsselte Wert komprimiert werden soll. Standardmäßig wird nicht komprimiert.

  • package: Ob der Umschlagschlüssel mit dem verschlüsselten Wert gepackt werden soll. Der Standardwert ist FALSE.

Man kann öffentliche Schlüssel auch im Nachhinein mit den Methoden getPublicKey() und setPublicKey() erhalten und setzen. Auch der private Schlüssel kann mit den entsprechenden Methoden getPrivateKey() und setPrivateKey() geholt und gesetzt werden.

// Verwende openssl und gib einen privaten Schlüssel an
$filter = new Zend_Filter_Encrypt(array(
    'adapter' => 'openssl',
    'private' => '/path/to/mykey/private.pem'
));

// natürlich kann man die öffentlichen Schlüssel auch
// bei der Instanziierung angeben
$filter->setPublicKey(array(
    '/public/key/path/first.pem',
    '/public/key/path/second.pem'
));

Anmerkung

Es ist zu beachten das der OpenSSL Adapter nicht funktionieren wird wenn keine gültigen Schlüsseln angegeben werden.

Wenn man auch die Schlüssel selbst verschlüsseln will, muß man eine Passphrase mit der setPassphrase() Methode angeben. Wenn man Inhalte entschlüsseln will, die mit einer Passphrase verschlüsselt wurden, muß man nicht nur den öffentlichen Schlüssel, sondern auch die Passphrase um den verschlüsselten Schlüssel zu entschlüsseln.

// Verwende openssl und gib einen privaten Schlüssel an
$filter = new Zend_Filter_Encrypt(array(
    'adapter' => 'openssl',
    'private' => '/path/to/mykey/private.pem'
));

// Natürlich kann man die öffentlichen Schlüssel
// auch bei der Instanziierung angeben
$filter->setPublicKey(array(
    '/public/key/path/first.pem',
    '/public/key/path/second.pem'
));
$filter->setPassphrase('mypassphrase');

Zum Schluß muß man, wenn OpenSSL verwendet wird, dem Empfänger den verschlüsselten Inhalt, die Passphrase, wenn eine angegeben wurde, und den Umschlagschlüssel für die Entschlüsselung angeben.

Das bedeutet, das man die Umschlagschlüssel nach der Verschlüsselung mit der getEnvelopeKey() Methode holen muß.

Unser komplettes Beispiel für die Verschlüsselung von Inhalten mit OpenSSL schaut wie folgt aus.

// Verwende openssl und gib einen privaten Schlüssel an
$filter = new Zend_Filter_Encrypt(array(
    'adapter' => 'openssl',
    'private' => '/path/to/mykey/private.pem'
));

// natürlich kann man die öffentlichen Schlüssel
// auch bei der Instaiziierung angeben
$filter->setPublicKey(array(
    '/public/key/path/first.pem',
    '/public/key/path/second.pem'
));
$filter->setPassphrase('mypassphrase');

$encrypted = $filter->filter('text_to_be_encoded');
$envelope  = $filter->getEnvelopeKey();
print $encrypted;

// Für die Entschlüsselung siehe beim Decrypt Filter
Vereinfachte Verwendung mit Openssl

Wie vorher zu sehen war, muss man den Umschlagschlüssel holen um in der Lage zu sein den vorher verschlüsselten Wert wieder zu entschlüsseln. Das kann sehr frustrierend sein wenn man mit mehreren Werten arbeitet.

Für eine vereinfachte Verwendung kann man die package Option auf TRUE setzen. Der Standardwert ist FALSE.

// Verwende openssl und gib einen privaten Schlüssel an
$filter = new Zend_Filter_Encrypt(array(
    'adapter' => 'openssl',
    'private' => '/path/to/mykey/private.pem',
    'public'  => '/public/key/path/public.pem',
    'package' => true
));

$encrypted = $filter->filter('text_to_be_encoded');
print $encrypted;

// Für die Entschlüsselung siehe beim Decrypt Filter

Jetzt enthält der zurückgegebene Wert sowohl den verschlüsselten Wert als auch den Umschlagschlüssel. Man muss diesen also nicht mehr nach der Verschlüsselung holen. Aber, und das ist der negative Aspekt dieses Features, der verschlüsselte Wert kann jetzt nur mehr entschlüsselt werden indem man Zend_Filter_Encrypt verwendet.

Komprimieren des Inhalts

Basierend auf dem originalen Wert, kann der verschlüsselte Wert ein sehr langer String sein. Um den Wert zu reduzieren erlaubt Zend_Filter_Encrypt die Verwendung von Kompression.

Die compression Option kann entweder auf den Namen eines Komprimierungsadapters gesetzt werden, oder auf ein Array welches alle gewünschten Optionen für den Komprimierungsadapter setzt.

// Verwende nur den grundsätzlichen Komprimierungsadapter
$filter1 = new Zend_Filter_Encrypt(array(
    'adapter'     => 'openssl',
    'private'     => '/path/to/mykey/private.pem',
    'public'      => '/public/key/path/public.pem',
    'package'     => true,
    'compression' => 'bz2'
));

// Verwende den Basis Komprimierungsadapter
$filter2 = new Zend_Filter_Encrypt(array(
    'adapter'     => 'openssl',
    'private'     => '/path/to/mykey/private.pem',
    'public'      => '/public/key/path/public.pem',
    'package'     => true,
    'compression' => array('adapter' => 'zip', 'target' => '\usr\tmp\tmp.zip')
));

Entschlüsselung mit den selben Werten

Wenn man einen Wert entschlüsseln will welcher zusätzlich komprimiert wurde, dann muss man die selben Komprimierungseinstellungen für die Entschlüsselung verwenden wie bei der Verschlüsselung. Andernfalls wird die Entschlüsselung fehlschlagen.

HtmlEntities

Gibt den String $value zurück, wobei Zeichen in Ihre HTML Entity Äquivalente konvertiert werden wenn diese existieren.

Unterstützte Optionen für Zend_Filter_HtmlEntities

Die folgenden Optionen werden für Zend_Filter_HtmlEntities unterstützt:

  • quotestyle: Äquivalent zum Parameter quote_style der nativen PHP Funktion htmlentities. Er erlaubt es zu definieren wass mit 'einfachen' und "doppelten" Hochkomma passieren soll. Die folgenden Konstanten werden akzeptiert: ENT_COMPAT, ENT_QUOTES ENT_NOQUOTES wobei ENT_COMPAT der Standardwert ist.

  • charset: Äquivalent zum Parameter charset der nativen PHP Funktion htmlentities. Er definiert das Zeichenset welches beim Filtern verwendet werden soll. Anders als bei der nativen PHP Funktion ist der Standardwert 'UTF-8'. Siehe "http://php.net/htmlentities" für eine Liste der unterstützten Zeichensets.

    Anmerkung

    Diese Option kann auch über den Parameter $options, als Zend_Config Objekt oder als Array gesetzt werden. Der Optionsschlüssel wird entweder als Zeichenset oder als Kodierung akzeptiert.

  • doublequote: Äquivalent zum Parameter double_encode der nativen PHP Funktion htmlentities. Wenn er auf false gesetzt wird, werden existierende html entities nicht kodiert. Der Standardwert ist es alles zu konvertieren (true).

    Anmerkung

    Diese Option muss über den Parameter $options oder die Methode setDoubleEncode() gesetzt werden.

Einfache Verwendung

Siehe das folgende Beispiel für das Standardverhalten dieses Filters.

$filter = new Zend_Filter_HtmlEntities();

print $filter->filter('<');

Hochkomma Stil

Zend_Filter_HtmlEntities erlaubt es den verwendete Hochkomma Stil zu verändern. Dies kan nützlich sein wenn man doppelte, einfache oder beide Typen von Hochkommas un-gefiltert lassen will. Siehe das folgende Beispiel:

$filter = new Zend_Filter_HtmlEntities(array('quotestyle' => ENT_QUOTES));

$input  = "Ein 'einfaches' und " . '"doppeltes"';
print $filter->filter($input);

Das obige Beispiel gibt Ein 'einfaches' und "doppeltes" zurück. Es ist zu beachten dass sowohl 'einfache' als auch "doppelte" Hochkommas gefiltert werden.

$filter = new Zend_Filter_HtmlEntities(array('quotestyle' => ENT_COMPAT));

$input  = "Ein 'einfaches' und " . '"doppeltes"';
print $filter->filter($input);

Das obige Beispiel gibt Ein 'einfaches' und "doppeltes" zurück. Es ist zu beachten dass "doppelte" Hochkommas gefiltert werden während 'einfache' Hochkommas nich verändert werden.

$filter = new Zend_Filter_HtmlEntities(array('quotestyle' => ENT_NOQUOTES));

$input  = "Ein 'einfaches' und" . '"doppeltes"';
print $filter->filter($input);

Das obige Beispiel gibt Ein 'einfaches' und "doppeltes" zurück. Es ist zu beachten dass "doppelte" oder 'einfache' Hochkommas verändert werden.

Helfer Methoden

Um die Option quotestyle nach der Instanzierung zu erhalten oder zu ändern, können die zwei Methoden setQuoteStyle() und getQuoteStyle() verwendet werden. setQuoteStyle() akzeptiert einen $quoteStyle Parameter. Die folgenden Konstanten werden akzeptiert: ENT_COMPAT, ENT_QUOTES, ENT_NOQUOTES

$filter = new Zend_Filter_HtmlEntities();

$filter->setQuoteStyle(ENT_QUOTES);
print $filter->getQuoteStyle(ENT_QUOTES);

Um die Option charset nach der Instanzierung zu erhalten oder zu ändern, können die zwei Methoden setCharSet() und getCharSet() verwendet werden. setCharSet() akzeptiert einen $charSet Parameter. Siehe "http://php.net/htmlentities" für eine Liste der unterstützten Zeichensets.

$filter = new Zend_Filter_HtmlEntities();

$filter->setQuoteStyle(ENT_QUOTES);
print $filter->getQuoteStyle(ENT_QUOTES);

Um die Option doublequote nach der Instanzierung zu erhalten oder zu ändern, können die zwei Methoden setDoubleQuote() und getDoubleQuote() verwendet werden. setDoubleQuote() akzeptiert einen boolschen Parameter $doubleQuote.

$filter = new Zend_Filter_HtmlEntities();

$filter->setQuoteStyle(ENT_QUOTES);
print $filter->getQuoteStyle(ENT_QUOTES);

Int

Zend_Filter_Int erlaubt es einen skalaren Wert in einen Integer Wert zu konvertieren.

Unterstützte Optionen für Zend_Filter_Int

Es gibt keine zusätzlichen Optionen für Zend_Filter_Int.

Einfache Verwendung

Ein einfaches Beispiel der Verwendung ist nachfolgend zu finden:

$filter = new Zend_Filter_Int();

print $filter->filter('-4 ist weniger als 0');

Das gibt '-4' zurück.

LocalizedToNormalized

Dieser Filter ändert jede angegebene lokalisierte Eingabe in seine normalisierte Repräsentation. Er verwendet im Hintergrund Zend_Locale um diese Transformation durchzuführen.

Das erlaubt es dem Benutzer Informationen in der Schreibweise seiner eigenen Sprache einzugeben, und man kann diese anschließend den normalisierten Wert zum Beispiel in der Datenbank speichern.

Anmerkung

Es ist zu beachten das Normalisierung nicht mit Übersetzung gleichzusetzen ist. Dieser Filter kann Strings nicht von einer Sprache in eine andere Übersetzen, wie man es zum Beispiel bei Monaten oder Namen von Tagen erwarten könnte.

Die folgenden Eingabetypen können normalisiert werden:

  • integer: Ganzzahlen, welche lokalisiert sind, werden in die englische Schreibweise normalisiert.

  • float: Gleitkommazahlen, welche lokalisiert sind, werden in die englische Schreibweise normalisiert.

  • numbers: Andere Zahlen, wie Realzahlen, werden in die englische Schreibweise normalisiert.

  • time: Zeitwerte, werden in ein benanntes Array normalisiert.

  • date: Datumswerte, werden in ein benanntes Array normalisiert.

Jede andere Eingabe wird so wie Sie ist zurückgegeben, ohne das Sie geändert wird.

Anmerkung

Man sollte beachten das normalisierte Ausgabe immer als String angegeben sind. Andernfalls würde die eigene Umgebung die normalisierte Ausgabe automatisch in die Schreibweise konvertieren welche die eigene Umgebung anhand des gesetzen Gebietsschemas aktuell verwendet.

Normalisierung von Zahlen

Jede angegebene Zahl wie Integer, Float oder Realzahlen können normalisiert werden. Es ist zu beachten das Zahlen in der Wissenschaftlichen Schreibweise, aktuell nicht von diesem Filter behandelt werden können.

Wie funktioniert diese Normalisierung also im Detail für Nummern:

// Den Filter initiieren
$filter = new Zend_Filter_LocalizedToNormalized();
$filter->filter('123.456,78');
// Gibt den Wert '123456.78' zurück

Nehmen wir an das wir das Gebietsschema 'de' als Anwendungsweites Gebietsschema gesetzt haben. Zend_Filter_LocalizedToNormalized nimmt das gesetzte Gebietsschema und verwendet es um zu erkennen welche Art der Eingabe angegeben wurde. In unserem Beispiel wurde ein Wert mit Nachkommastellen angegeben. Jetzt gibt der Filter die normalisierte Repräsentation für diesen Wert als String zurück.

Man kann auch kontrollieren wie die normalisierte Nummer auszusehen hat. Hierfür kann man alle Optionen angeben die auch von Zend_Locale_Format verwendet werden. Die üblichsten sind:

  • date_format

  • locale

  • precision

Für Details darüber, wie diese Optionen verwendet werden, sollte man in der Kapitel Zend_Locale sehen.

Anbei ist ein Beispiel welches Nachkommastellen definiert damit man sehen kann wie Optionen arbeiten:

// Nummerischer Filter
$filter = new Zend_Filter_LocalizedToNormalized(array('precision' => 2));

$filter->filter('123.456');
// Gibt den Wert '123456.00' zurück

$filter->filter('123.456,78901');
// Gibt den Wert '123456.79' zurück

Normalisierung für Datum und Zeit

Eingaben für Datum und Zeitwerte können auch normalisiert werden. Alle angegebenen Datums- und Zeitwerte werden als Array zurückgegeben, wobei jeder Teil des Datums mit einem eigenen Schlüssel angegeben wird.

// Den Filter initiieren
$filter = new Zend_Filter_LocalizedToNormalized();
$filter->filter('12.April.2009');
// Gibt array('day' => '12', 'month' => '04', 'year' => '2009') zurück

Angenommen wir haben wieder das Gebietsschema 'de' gesetzt. Die Eingaben werden jetzt automatisch als Datum erkannt und man erhält ein benanntes Array zurück.

Natürlich kann man auch kontrollieren wie die Datumseingaben auszusehen haben indem die Optionen date_format und locale verwendet werden.

// Datumsfilter
$filter = new Zend_Filter_LocalizedToNormalized(
    array('date_format' => 'ss:mm:HH')
);

$filter->filter('11:22:33');
// Gibt array('hour' => '33', 'minute' => '22', 'second' => '11') zurück

NormalizedToLocalized

Dieser Filter ist das Gegenteil des Zend_Filter_LocalizedToNormalized Filters und ändert jede angegebene normalisierte Eingabe in Ihre lokalisierte Repräsentation. Er verwendet im Hintergrund Zend_Locale um diese Transformation durchzuführen.

Das erlaubt es einem, dem Benutzer jeden gespeicherten normalisierten Wert in einer lokalisierten Art und Weise anzugeben, die dem Benutzer verständlicher ist.

Anmerkung

Es ist zu beachten das Lokalisierung nicht mit Übersetzung gleichzusetzen ist. Dieser Filter kann Strings nicht von einer Sprache in eine andere Übersetzen, wie man es zum Beispiel bei Monaten oder Namen von Tagen erwarten könnte.

Die folgenden Eingabetypen können lokalisiert werden:

  • integer: Ganzzahlen, welche normalisiert sind, werden in die gesetzte Schreibweise lokalisiert.

  • float: Gleitkommazahlen, welche normalisiert sind, werden in die gesetzte Schreibweise lokalisiert.

  • numbers: Andere Zahlen, wie Realzahlen, werden in die gesetzte Schreibweise lokalisiert.

  • time: Zeitwerte, werden in einen String lokalisiert.

  • date: Datumswerte, werden in einen String lokalisiert.

Jede andere Eingabe wird so wie Sie ist zurückgegeben, ohne das Sie geändert wird.

Lokalisierung von Zahlen

Jede angegebene Zahl wie Integer, Float oder Realzahlen können lokalisiert werden. Es ist zu beachten das Zahlen in der Wissenschaftlichen Schreibweise, aktuell nicht von diesem Filter behandelt werden können.

Wie funktioniert diese Lokalisierung also im Detail für Nummern:

// Den Filter initiieren
$filter = new Zend_Filter_NormalizedToLocalized();
$filter->filter(123456.78);
// Gibt den Wert '123.456,78' zurück

Nehmen wir an das wir das Gebietsschema 'de' als Anwendungsweites Gebietsschema gesetzt haben. Zend_Filter_NormalizedToLocalized nimmt das gesetzte Gebietsschema und verwendet es um zu erkennen welche Art der Eingabe man haben will. In unserem Beispiel wurde ein Wert mit Nachkommastellen angegeben. Jetzt gibt der Filter die lokalisierte Repräsentation für diesen Wert als String zurück.

Man kann auch kontrollieren wie die lokalisierte Nummer auszusehen hat. Hierfür kann man alle Optionen angeben die auch von Zend_Locale_Format verwendet werden. Die üblichsten sind:

  • date_format

  • locale

  • precision

Für Details darüber, wie diese Optionen verwendet werden, sollte man in der Kapitel Zend_Locale sehen.

Anbei ist ein Beispiel welches Nachkommastellen definiert damit man sehen kann wie Optionen arbeiten:

// Nummerischer Filter
$filter = new Zend_Filter_NormalizedToLocalized(array('precision' => 2));

$filter->filter(123456);
// Gibt den Wert '123.456,00' zurück

$filter->filter(123456.78901);
// Gibt den Wert '123.456,79' zurück

Lokalisierung für Datum und Zeit

Normalisierte Datums- und Zeitwerte können auch lokalisiert werden. Alle angegebenen Datums- und Zeitwerte werden als String, im Format das vom gesetzten Gebietsschema definiert ist, zurückgegeben.

// Den Filter initiieren
$filter = new Zend_Filter_NormalizedToLocalized();
$filter->filter(array('day' => '12', 'month' => '04', 'year' => '2009');
// Gibt '12.04.2009' zurück

Angenommen wir haben wieder das Gebietsschema 'de' gesetzt. Die Eingaben werden jetzt automatisch als Datum erkannt und man erhält ein benanntes Array zurück.

Natürlich kann man auch kontrollieren wie die Datumseingaben auszusehen haben indem die Optionen date_format und locale verwendet werden.

// Datumsfilter
$filter = new Zend_Filter_LocalizedToNormalized(
    array('date_format' => 'ss:mm:HH')
);

$filter->filter(array('hour' => '33', 'minute' => '22', 'second' => '11'));
// Gibt '11:22:33' zurück

Null

Dieser Filter ändert die angegebene Eingabe so dass Sie NULL ist wenn Sie spezifischen Kriterien entspricht. Das ist oft notwendig wenn man mit Datenbanken arbeitet und einen NULL Wert statt einem Boolean oder irgendeinem anderen Typ haben will.

Standardverhalten für Zend_Filter_Null

Standardmäßig arbeitet dieser Filter wie PHP's empty() Methode; in anderen Worten, wenn empty() ein boolsches TRUE zurückgibt, dann wird ein NULL Wert zurückgegeben.

$filter = new Zend_Filter_Null();
$value  = '';
$result = $filter->filter($value);
// Gibt null statt einem leeren String zurück

Das bedeutet das Zend_Filter_Null, ohne die Angabe irgendeiner Konfiguration, alle Eingabetypen akteptiert und in den selben Fällen NULL zurückgibt wie empty().

Jeder andere Wert ist zurückgegeben wie er ist, ohne irgendwelche Änderungen.

Ändern des Verhaltens von Zend_Filter_Null

Manchmal ist es nicht genug basieren auf empty() zu filtern. Hierfür erlaubt es Zend_Filter_Null die Typen zu konfigurieren welche konvertiert werden und jene die nicht konvertiert werden.

Die folgenden Typen können behandelt werden:

  • boolean: Konvertiert einen boolschen FALSE Wert zu NULL.

  • integer: Konvertiert einen Integer 0 Wert zu NULL.

  • empty_array: Konvertiert ein leeres Array zu NULL.

  • string: Konvertiert einen leeren String '' zu NULL.

  • zero: Konvertiert einen String der eine einzelne Null Ziffer enthält ('0') zu NULL.

  • all: Konvertiert alle obigen Typen zu NULL. (Das ist das Standardverhalten.)

Es gibt verschiedene Wege um zu wählen welche der obigen Typen gefiltert werden und welche nicht. Man kann einen oder mehrere Typen angeben und diese addieren, man kann ein Array angeben, man kann Konstanten verwenden, oder man kann einen textuellen String angeben. Siehe die folgenden Beispiele:

// Konvertiert false zu null
$filter = new Zend_Filter_Null(Zend_Filter_Null::BOOLEAN);

// Konvertiert false und 0 zu null
$filter = new Zend_Filter_Null(
    Zend_Filter_Null::BOOLEAN + Zend_Filter_Null::INTEGER
);

// Konvertiert false und 0 zu null
$filter = new Zend_Filter_Null( array(
    Zend_Filter_Null::BOOLEAN,
    Zend_Filter_Null::INTEGER
));

// Konvertiert false und 0 zu null
$filter = new Zend_Filter_Null(array(
    'boolean',
    'integer',
));

Man kann auch eine Instanz von Zend_Config angeben um die gewünschten Typen zu setzen. Um Typen im nachhinein zu setzen kann setType() verwendet werden.

PregReplace

Zend_Filter_PregReplace führt eine Suche durch indem es Reguläre Ausdrücke verwendet und alle gefundenen Elemente ersetzt.

Die Option match muss angegeben werden um das Pattern zu Setzen nach dem gesucht wird. Es kann ein String, für ein einzelnes Pattern sein, oder ein Array von Strings für mehrere Pattern.

Um das Pattern zu Setzen das als Ersatz verwendet wird, muss die Option replace verwendet werden. Es kann ein String, für ein einzelnes Pattern sein, oder ein Array von Strings für mehrere Pattern.

$filter = new Zend_Filter_PregReplace(array('match' => '/bob/',
                                            'replace' => 'john'));
$input  = 'Hy bob!';

$filter->filter($input);
// Gibt 'Hy john!' zurück

Man kann getMatchPattern() und setMatchPattern() verwenden um die Suchpattern im Nachhinein zu Setzen. Um das Ersatzpattern zu Setzen können getReplacement() und setReplacement() verwendet werden.

$filter = new Zend_Filter_PregReplace();
$filter->setMatchPattern(array('bob', 'Hy'))
       ->setReplacement(array('john', 'Bye'));
$input  = 'Hy bob!";

$filter->filter($input);
// Gibt 'Bye john!' zurück

Für eine komplexere Verwendung sollte man einen Blick in PHP's Kapitel für PCRE Pattern werfen.

RealPath

Dieser Filter löst gegebene Links und Pfadnamen auf und gibt kanonische absolute Pfadnamen zurück. Referenzen zu '/./', '/../' und extra '/' Zeichen im Eingabepfad werden entfernt. Der Ergebnispfad hat keine symbolischen Links, '/./' oder '/../' Zeichen mehr.

Zend_Filter_RealPath gibt bei einem Fehler FALSE zurück, z.B. wenn die Datei nicht existiert. Auf BSD Systemen schlägt Zend_Filter_RealPath nicht fehl wenn nur die letzte Komponente des Pfades nicht existiert, während andere Systeme FALSE zurückgeben.

$filter = new Zend_Filter_RealPath();
$path   = '/www/var/path/../../mypath';
$filtered = $filter->filter($path);

// Gibt '/www/mypath' zurück

Manchmal ist es auch nützlich einen Pfad zu erhalten wenn diese nicht existiert, z.B. wenn man den echten Pfad für einen Pfad erhalten will den man erstellt. Man kann entweder ein FALSE bei der Initialisierung angeben, oder setExists() verwenden um es zu setzen.

$filter = new Zend_Filter_RealPath(false);
$path   = '/www/var/path/../../non/existing/path';
$filtered = $filter->filter($path);

// Gibt '/www/non/existing/path' zurück, selbst wenn
// file_exists oder realpath false zurückgeben würden

StringToLower

Dieser Filter konvertiert alle Eingabe so das Sie kleingeschrieben sind.

$filter = new Zend_Filter_StringToLower();

print $filter->filter('SAMPLE');
// gibt "sample" zurück

Standardmäßig behandelt er nur Zeichen aus dem aktuellen Gebietsschema des eigenen Servers. Zeichen von anderen Zeichensets werden ignoriert. Trotzdem ist es möglich auch diese, mit der mbstring Erweiterung, kleinzuschreiben wenn diese in der eigenen Umgebung vorhanden ist. Es muß, bei der Initialisierung des StringToLower Filters, einfach die gewünschte Kodierung angegeben werden. Oder man verwendet die setEncoding() Methode, um die Kodierung im Nachhinein zu ändern.

// Verwendung von UTF-8
$filter = new Zend_Filter_StringToLower('UTF-8');

// Oder ein Array angeben was bei der Verwendung einer
// Konfiguration nützlich sein kann
$filter = new Zend_Filter_StringToLower(array('encoding' => 'UTF-8'));

// Oder im Nachinein
$filter->setEncoding('ISO-8859-1');

Falsche Kodierungen setzen

Man sollte darauf achten das man eine Exception bekommt wenn man eine Kodierung setzt, solange die mbstring Erweiterung in der eigenen Umgebung nicht vorhanden ist.

Auch wenn man eine Kodierung setzt, welche von der mbstring Erweiterung nicht unterstützt wird, erhält man eine Exception.

StringToUpper

Dieser Filter konvertiert alle Eingaben so das Sie großgeschrieben sind.

$filter = new Zend_Filter_StringToUpper();

print $filter->filter('Sample');
// gibt "SAMPLE" zurück

So wie der StringToLower Filter, kann dieser Filter nur jene Zeichen behandeln welche vom aktuellen Gebietsschema des eigenen Servers unterstützt werden. Die Verwendung anderer Zeichensets funktioniert genauso wie bei StringToLower.

$filter = new Zend_Filter_StringToUpper(array('encoding' => 'UTF-8'));

// oder im Nachhinein
$filter->setEncoding('ISO-8859-1');

StringTrim

Dieser Filter verändert einen angegebenen String so dass bestimmte Zeichen vom Anfang und vom Ende entfernt werden.

Unterstützte Optionen für Zend_Filter_StringTrim

Die folgenden Optionen werden für Zend_Filter_StringTrim unterstützt:

  • charlist: Liste der Zeichen welche vom Anfang und vom Ende des Strings entfernt werden sollen. Wenn sie nicht gesetzt wird oder null ist, wird das Standardverhalten verwendet, welches nur Leerzeichen vom Beginn und vom Ende des Strings entfernt.

Einfache Verwendung

Ein einfaches Beispiel der Verwendung ist nachfolgend zu finden:

$filter = new Zend_Filter_StringTrim();

print $filter->filter(' Das ist (mein) Inhalt: ');

Das obige Beispiel gibe 'Das ist (mein) Inhalt:' zurück. Es sollte beachtet werden dass alle Leerzeichen entfernt wurden.

Standardverhalten für Zend_Filter_StringTrim

$filter = new Zend_Filter_StringTrim(':');
// oder new Zend_Filter_StringTrim(array('charlist' => ':'));

print $filter->filter(' Das ist (mein) Inhalt:');

Das obige Beispiel gibt 'Das ist (mein) Inhalt' zurück. Es sollte beachtet werden dass Leerzeichen und Doppelpunkte entfernt werden. Man kann auch eine Instanz von Zend_Config oder ein Array mit einem 'charlist' Schlüssel angeben. Un die gewünschte Liste der Zeichen nach der Instanzierung zu setzen kann die Methode setCharList() verwendet werden. getCharList() gibt die Werte zurück welche für die Zeichenliste gesetzt sind.

StripNewlines

Gibt den String $value ohne Zeilenumbruch Zeichen zurück.

StripTags

Dieser Filter gibt den Eingabestring zurück, wobei alle HTML und PHP Tags von Ihm entfernt werden ausser diesen die explizit erlaubt sind. Zusätzlich zur Möglichkeit zu definieren welche Tags erlaubt sind können Entwickler definieren welche Attribute über alle erlaubten Tags erlaubt sind und auch nur für spezielle Tags.