Zend Framework kommt mit einem Standardset von Filtern, welche bereits zur Verwendung fertig sind.
Zend_Filter_Alnum
ist ein Filter welche nur alphabetische Zeichen und
Ziffern zurückgibt. Alle anderen Zeichen werden unterdrückt.
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.
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.
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.
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.
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.
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.
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.
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.
Es gibt keine zusätzlichen Optionen für Zend_Filter_BaseName
.
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.
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.
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.
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
zuFALSE
. -
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.
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');
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);
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.
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)
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
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;
Gibt den String $value
zurück und entfernt alle ausser Ziffern.
Es gibt keine zusätzlichen Optionen für Zend_Filter_Digits
.
Ein angegebener String welcher den Pfad zu einer Datei enthält wird von dieser Funktion nur den Namen des Verzeichnisses zurückgeben.
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.
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
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
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.
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.
Gibt den String $value
zurück, wobei Zeichen in Ihre
HTML Entity Äquivalente konvertiert werden wenn diese existieren.
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
wobeiENT_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
, alsZend_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 MethodesetDoubleEncode()
gesetzt werden.
Siehe das folgende Beispiel für das Standardverhalten dieses Filters.
$filter = new Zend_Filter_HtmlEntities(); print $filter->filter('<');
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.
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);
Zend_Filter_Int
erlaubt es einen skalaren Wert in einen Integer Wert
zu konvertieren.
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.
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
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
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.
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
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
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.
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.
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 zuNULL
. -
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.
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.
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
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.
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');
Dieser Filter verändert einen angegebenen String so dass bestimmte Zeichen vom Anfang und vom Ende entfernt werden.
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.
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.
$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.
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.