Zend Framework est fourni avec un jeu de filtres standards, qui sont directement utilisables.
Zend_Filter_Alnum
est un filtre qui ne retourne que des caractères
alphabétiques et des chiffres. Tout autre caractère est supprimé.
Les options suivantes sont supportées par Zend_Filter_Alnum
:
-
allowwhitespace: Si activée, les espaces seront autorisés, autrement ils sont supprimés. Par défaut, les espaces ne sont pas autorisés et supprimés.
Voyez l'exemple suivant pour le comportement par défaut de ce filtre.
$filter = new Zend_Filter_Alnum(); $return = $filter->filter('This is (my) content: 123'); // retourne 'Thisismycontent123'
L'exemple ci-dessus retourne 'Thisismycontent123'. Comme vous le voyez, tous les espaces et le double-point sont filtrés.
Note
Zend_Filter_Alnum
fonctionne sur presque tous les langages. Les exceptions
sont le chinois, le japonnais et le coréen. Ces langues utiliseront l'alphabet anglais plutot que
le leur. Le langage est détecté par Zend_Locale
.
Zend_Filter_Alnum
peut aussi autoriser les espaces. Ca peut être utile, voyez
l'exemple suivant:
$filter = new Zend_Filter_Alnum(array('allowwhitespace' => true)); $return = $filter->filter('This is (my) content: 123'); // retourne 'This is my content 123'
L'exemple ci-dessus retourne 'This is my content 123'. Comme vous le voyez, le double-point est filtré ainsi que les parenthèses, mais pas les espaces.
Pour changer allowWhiteSpace après construction de l'objet, utilisez
setAllowWhiteSpace()
et
getAllowWhiteSpace()
.
Zend_Filter_Alpha
est un filtre qui va retourner
$value
en enlevant tout caractère non alphabétique. Ce filtre propose
une option pour autoriser le caractère espace.
Les options suivantes sont supportées par Zend_Filter_Alpha
:
-
allowwhitespace: Si activée, les espaces seront autorisés. Par défaut, ils sont supprimés.
Voici un exemple de base:
$filter = new Zend_Filter_Alpha(); print $filter->filter('This is (my) content: 123');
L'exemple ci-dessus affiche 'Thisismycontent'. Remarquez que les espaces et le double-point ont été supprimés.
Note
Zend_Filter_Alpha
fonctionne sur presque tous les langages. Les exceptions
sont le chinois, le japonnais et le coréen. Ces langues utiliseront l'alphabet anglais plutot que
le leur. Le langage est détecté par Zend_Locale
.
Zend_Filter_Alpha
peut aussi autoriser les espaces. Ca peut être utile, voyez
l'exemple suivant:
$filter = new Zend_Filter_Alpha(array('allowwhitespace' => true)); print $filter->filter('This is (my) content: 123');
L'exemple ci-dessus retourne 'This is my content'. Comme vous le voyez, le double-point ainsi que les chiffres et les parenthèses sont filtrés mais pas les espaces.
Pour changer allowWhiteSpace après construction de l'objet, utilisez
setAllowWhiteSpace()
et
getAllowWhiteSpace()
.
Zend_Filter_BaseName
permet de retourner le nom d'un fichier
dans une chaine représentant un chemin vers ce fichier.
Il n'y a pas d'option supplémentaire gérée par Zend_Filter_BaseName
.
Ce filtre transforme toute donnée en valeur BOOLEAN
. Ce peut être
utile en travaillant avec des bases de données ou des formulaires.
Les options suivantes sont supportées par
Zend_Filter_Boolean
:
-
casting : quand cette option est fixée à
TRUE
alors toute entrée sera transtypée en booléen. Cette option vautTRUE
par défaut. -
locale : cette option permet de spécifier la locale qui sera utilisée pour détecter une entrée localisée.
-
type : l'option type spécifie le type de booléen qui sera utilisé. Lisez ce qui suit pour plus de détails.
Par défaut, ce filtre transtype sa valeur vers un
BOOLEEN
; en d'autres termes, il fonctionne comme un appel
PHP de type (boolean) $value.
$filter = new Zend_Filter_Boolean(); $value = ''; $result = $filter->filter($value); // retourne false
Ceci signifie que sans paramètre additionnel,
Zend_Filter_Boolean
prend toute valeur d'entrée et retourne un
BOOLEEN
comme le transtypage PHP vers le
BOOLEEN
.
Parfois, le transtypage tel que (boolean) peut ne pas suffire.
Zend_Filter_Boolean
permet ainsi de configurer les types d'entrée
à convertir, et ceux à ignorer.
Les types suivants sont acceptés :
-
boolean : retourne la valeur booléenne telle quelle.
-
integer : convertit l'entier 0 en
FALSE
. -
float : convertit le flottant 0.0 en
FALSE
. -
string : convertit la chaîne vide '' en
FALSE
. -
zero : convertit la chaîne contenant zéro ('0') en
FALSE
. -
empty_array : convertit le tableau vide array() en
FALSE
. -
null : convertit une valeur
NULL
enFALSE
. -
php : convertit une valeur, comme PHP le ferait, en
BOOLEEN
. -
false_string : convertit une chaîne contenant le mot "false" en booléen
FALSE
. -
yes : convertit une chaîne localisée contenant le mot "no" en
FALSE
. -
all : convertit tous les types ci-dessus vers un
BOOLEEN
.
Toute autre valeur fournie retournera TRUE
.
Pour préciser les options ci-dessus, plusieurs manières sont données : utilisez des chaînes, des constantes, ajoutez les, utilisez des tableaux... Voyez l'exemple :
// convertit 0 vers false $filter = new Zend_Filter_Boolean(Zend_Filter_Boolean::INTEGER); // convertit 0 et '0' vers false $filter = new Zend_Filter_Boolean( Zend_Filter_Boolean::INTEGER + Zend_Filter_Boolean::ZERO ); // convertit 0 et '0' vers false $filter = new Zend_Filter_Boolean(array( 'type' => array( Zend_Filter_Boolean::INTEGER, Zend_Filter_Boolean::ZERO, ), )); // convertit 0 et '0' vers false $filter = new Zend_Filter_Boolean(array( 'type' => array( 'integer', 'zero', ), ));
Vous pouvez aussi passer une instance de Zend_Config
pour
préciser les options. Pour préciser ces options après la création de votre objet,
utilisez la méthode setType()
.
Comme déjà précisé, Zend_Filter_Boolean
reconnaît les chaînes
localisées "yes" et "no". Ceci signifie que vous pouvez demander au client au travers
d'un formulaire "oui" ou "non" dans sa propre langue et
Zend_Filter_Boolean
convertira la valeur vers le booléen
approprié.
Préciser la locale s'effectue grâce à la clé de configuration
locale ou la méthode setLocale()
.
$filter = new Zend_Filter_Boolean(array( 'type' => Zend_Filter_Boolean::ALL, 'locale' => 'de', )); // retourne false echo $filter->filter('nein'); $filter->setLocale('en'); // retourne true $filter->filter('yes');
Il peut arriver de ne vouloir que reconnaître TRUE
ou
FALSE
et donc retourner les autres valeurs telles quelles.
Zend_Filter_Boolean
permet un tel comportement via son
option casting lorsque réglée sur FALSE
.
Dans un tel cas, Zend_Filter_Boolean
fonctionnera comme décrit
dans le tableau ci-dessous qui montre quelles valeurs retournent
TRUE
ou FALSE
. Toute autre valeur non
présente dans ce tableau sera retournée telle quelle lorsque l'option
casting vaut FALSE
.
Tableau 75. Utilisation sans transtypage
Type | 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" (non sensible à la casse) | "true" (non sensible à la casse) |
Zend_Filter_Boolean::YES |
"oui" localisé (non sensible à la casse) | "non" localisé (non sensible à la casse) |
L'exemple qui suit illustre l'utilisation de l'option casting :
$filter = new Zend_Filter_Boolean(array( 'type' => Zend_Filter_Boolean::ALL, 'casting' => false, )); // retourne false echo $filter->filter(0); // retourne true echo $filter->filter(1); // retourne la valeur echo $filter->filter(2);
Ce filtre vous permet d'utiliser votre propre fonction en tant que filtre de
Zend_Filter
. Nul besoin de créer un filtre si une fonction ou
méthode fait déja le travail.
Les options suivantes sont supportées par
Zend_Filter_Callback
:
-
callback : ceci spécifie le callback qui sera utilisé.
-
options : cette propriété les options utilisées lorsque le callback est exécuté.
L'utilisation de ce filtre est assez simple. Prenos par exemple un filtre qui inverse une chaine.
$filter = new Zend_Filter_Callback('strrev'); print $filter->filter('Hello!'); // retourne "!olleH"
C'est très simple de passer une fonction à appliquer comme filtre. Dans le cas de méthodes de classes, passez un tableau comme callback.
// Notre classe class MyClass { public function Reverse($param); } // La définition du filtre $filter = new Zend_Filter_Callback(array('MyClass', 'Reverse')); print $filter->filter('Hello!');
Pour récupérer la fonction de filtrage actuelle, utilisez
getCallback()
et pour en affecter une nouvelle, utilisez
setCallback()
.
Exception possible
Notez que passer une fonction qui ne peut être appelée mènera à une exception.
Il est aussi possible de définir des paramètres par défaut qui sont alors passés à la méthode appelée lorsque le filtre est exécuté.
$filter = new Zend_Filter_Callback( array( 'callback' => 'MyMethod', 'options' => array('key' => 'param1', 'key2' => 'param2') ) ); $filter->filter(array('value' => 'Hello'));
L'appel manuel à une telle fonction se serait fait comme cela:
$value = MyMethod('Hello', 'param1', 'param2');
Ces deux filtres sont capables de compresser et décompresser des chaines, des fichiers ou des dossiers.
Les options suivantes sont supportées par
Zend_Filter_Compress
et
Zend_Filter_Decompress
:
-
adapter : l'adaptateur de compression qui doit être utrilisé. Vaut par défaut Gz.
-
options : options additionnelles qui sont fournies à l'initialisation de l'adaptateur. Chaque adaptateur supporte ses propres options.
Les formats de compression suivants sont supportés par leurs adaptateurs respectifs :
-
Bz2
-
Gz
-
Lzf
-
Rar
-
Tar
-
Zip
Chaque format de compression possède des caractéristiques propres et ils s'utilisent tous d'une manière commune. Seules leurs options vont différer ainsi que les types de compressions qu'ils offrent (algorithmes, fichiers, chaines et dossiers)
Pour créer un filtre de compression vous devez sélectionner le format que vous désirez. La description suivante utilisera l'adaptateur Bz2. Les détails des autres adaptateurs seront précisés plus tard dans la section suivante.
Les deux filtres (compression et décompression) sont identiques lorsqu'ils utilisent le
même adaptateur. Simplement Zend_Filter_Compress
est utilisé
pour les opérations de compression alors que Zend_Filter_Decompress
est utilisé pour la décompression.
Par exemple, si nous voulons compresser une chaine nous devons instancier
Zend_Filter_Compress
et indiquer un adaptateur.
$filter = new Zend_Filter_Compress('Bz2');
Les adaptateurs se spécifient donc dans le constructeur.
Il est aussi possible de passer des options sous forme de tableau ou d'objet
Zend_Config
. Si vous souhaitez préciser des options, vous devez
alors au minimum indiquer la clé "adapter". Les clés "options" ou
"adapterOptions" peuvent ensuite être utilisées et doivent représenter un tableau.
$filter = new Zend_Filter_Compress(array( 'adapter' => 'Bz2', 'options' => array( 'blocksize' => 8, ), ));
Adaptateur de compression par défaut
Lorsque vous ne précisez aucun adaptateur, Gz sera utilisé par défaut.
Concernant la décompression, le principe est exactement identique.
$filter = new Zend_Filter_Decompress('Bz2');
Pour récupérer une chaine compressée, il faut indiquer la chaine originale. La valeur "filtrée" récupérée sera alors la chaine compressée, tout simplement.
$filter = new Zend_Filter_Compress('Bz2'); $compressed = $filter->filter('Uncompressed string'); // Retourne la chaine compressée
La décompression suit exactement le même principe.
$filter = new Zend_Filter_Decompress('Bz2'); $compressed = $filter->filter('Compressed string'); // Retourne la chaine décompressée
Note sur la compression de chaines
Tous les adaptateurs ne supportent pas la compression de chaines. Les formats tels que Rar ne savent que traiter des fichiers ou des répertoires. Pour les détails, consultez la documentation relative à l'adaptateur en question.
Créer une archive fonctionne quasiment de la même manière que la compression d'une chaine. Cependant dans ce cas, nous devons préciser une options supplémentaire indiquant le nom de l'archive à créer.
$filter = new Zend_Filter_Compress(array( 'adapter' => 'Bz2', 'options' => array( 'archive' => 'filename.bz2', ), )); $compressed = $filter->filter('Uncompressed string'); // Retourne true en cas de succès et crée le fichier d'archive
Dans l'exemple ci-dessus, la chaine est compressée puis retournée dans une archive.
Les archives existantes seront écrasées
Si l'archive existe déja, elle sera écrasée.
Si vous souhaitez compresser un fichier, vous devez fournir son chemin.
$filter = new Zend_Filter_Compress(array( 'adapter' => 'Bz2', 'options' => array( 'archive' => 'filename.bz2' ), )); $compressed = $filter->filter('C:\temp\compressme.txt'); // Retourne true en cas de succès et crée le fichier d'archive
Il est aussi possible de préciser le nom d'un dossier plutôt que d'un fichier. Dans ce cas, tout le dossier sera compressé, récursivement.
$filter = new Zend_Filter_Compress(array( 'adapter' => 'Bz2', 'options' => array( 'archive' => 'filename.bz2' ), )); $compressed = $filter->filter('C:\temp\somedir'); // Retourne true en cas de succès et crée le fichier d'archive
Ne compressez pas un dossier trop gros ou trop profond
Vous ne devriez jamais tenter de compresser un dossier trop gros ou trop profond, comme par exemple une partition complète. Une telle opération s'avère très longue et très couteuse en ressources ce qui peut provoquer des problèmes sur votre serveur.
Décompresser une archive s'éxecute d'une manière sensiblement identique à la compression. Vous devez passer le paramètre archive ou préciser le nom du fichier.
$filter = new Zend_Filter_Decompress('Bz2'); $compressed = $filter->filter('filename.bz2'); // Retourne true en cas de succès et décompresse le fichier d'archive
Certains adaptateurs permettent la décompression d'une archive dans un dossier cible, dans ce cas le paramètre target permet de l'indiquer.
$filter = new Zend_Filter_Decompress(array( 'adapter' => 'Zip', 'options' => array( 'target' => 'C:\temp', ) )); $compressed = $filter->filter('filename.zip'); // Retourne true en cas de succès et décompresse le fichier d'archive // dans le dossier spécifié
Les dossiers de cible doivent exister
Lorsque vous souhaitez décompresser une archive dans un dossier cible, vérifiez bien que celui-ci existe déja.
L'adaptateur Bz2 peut compresser et décompresser:
-
Chaines
-
Fichiers
-
Dossiers
Cet adaptateur utilise l'extension PHP Bz2.
Pour personnaliser la compression, cet adaptateur utilise les options suivantes:
-
Archive: Précise l'archive à utiliser ou à créer.
-
Blocksize: Précise la taille des blocs. Des valeurs de '0' à '9' sont permises. La valeur par défaut est '4'.
Toutes les options peuvent être passées à l'instanciation ou en utilisant des méthodes.
Par exemple pour la tailles des blocs, getBlocksize()
et
setBlocksize()
. La méthode
setOptions()
est aussi présente, elle accepte un tableau
L'adaptateur Bz2 peut compresser et décompresser:
-
Chaines
-
Fichiers
-
Dossiers
Cet adaptateur utilise l'extension PHP Zlib.
Pour personnaliser la compression, cet adaptateur utilise les options suivantes:
-
Archive: L'archive à créer ou à utiliser.
-
Level: Niveau de compression. Des valeurs de '0' à '9' sont utilisables, par défaut : '9'.
-
Mode: Il existe deux modes supportés : 'compress' et 'deflate'. La valeur par défaut est 'compress'.
Toutes les options peuvent être passées en constructeur ou en utilisant des méthodes.
Par exemple, pour l'option 'Level', getLevel()
et
setLevel()
. La méthode
setOptions()
est aussi présente et accepte un tableau.
L'adaptateur Lzf peut compresser et décompresser:
-
Chaines
Lzf ne supporte que les chaines de caractères
Lzf ne supporte pas les fichiers et les dossiers.
Cet adaptateur utilise l'extension PHPLzf.
Il n'existe pas d'options pour personnaliser cet adaptateur.
L'adaptateur Rar peut compresser et décompresser:
-
Fichiers
-
Dossiers
Rar ne supporte pas les chaines de caractères
L'adaptateur Rar ne supporte pas les chaines de caractères
Cet adaptateur utilise l'extension PHP Rar.
Compression Rar non supportée
Des restrictions du format Rar ne permettent pas la compression gratuite. Si vous souhaitez compresser avec cet adaptateur, vous devrez passer une fonction de callback qui utilisera un algorithme ou fera appel à un programme externe.
Cet adaptateur accepte les options suivantes:
-
Archive: Précise l'archive à créer ou à utiliser.
-
Callback: Une fonction de callback fournissant des services de compression à l'adaptateur.
-
Password: Le mot de passe à utiliser éventuellement en cas de décompression.
-
Target: La cible vers laquelle les fichiers décompressés seront écrits.
Toutes les options peuvent être passées au constructeurs ou via des méthodes.
Par exemple, pour l'option 'Target', getTarget()
et
setTarget()
.La méthode
setOptions()
est aussi disponible et accepte un tableau.
L'adaptateur Tar peut compresser et décompresser:
-
Fichiers
-
Dossiers
Tar ne supporte pas les chaines de caractères
L'adaptateur Tar ne supporte pas les chaines de caractères
Cet adaptateur utilise le paquet PEAR
Archive_Tar
.
Cet adaptateur accepte les options suivantes:
-
Archive: Précise l'archive à utiliser ou à créer.
-
Mode: Mode de compression. Les modes supportés sont 'null' qui signifie pas de compression, 'Gz' qui utilisera l'extension PHP Zlib et 'Bz2' qui utilisera l'extension PHPBz2. La valeur par défaut est 'null'.
-
Target: La cible vers laquelle les fichier décompressés seront écrits.
Toutes les options peuvent être passées au constructeurs ou via des méthodes.
Par exemple, pour l'option 'Target', getTarget()
et
setTarget()
.La méthode
setOptions()
est aussi disponible et accepte un tableau.
Utilisation avec des dossiers
La compression des dossiers avec Tar utilise le chemin complet comme nom de fichier.
L'adaptateur Zip peut compresser et décompresser:
-
Chaines
-
Fichiers
-
Dossiers
Zip ne supporte pas la décompression vers des chaines
L'adaptateur Zip ne supporte pas la décompression vers des chaines. Un fichier sera systématiquement crée.
Cet adaptateur utilise l'extension PHP
Zip
.
Les options suivantes sont supportées :
-
Archive: Précise l'archive qui sera utilisée ou créee.
-
Target: La cible vers laquelle décompresser.
Toutes les options peuvent être passées au constructeurs ou via des méthodes.
Par exemple, pour l'option 'Target', getTarget()
et
setTarget()
.La méthode
setOptions()
est aussi disponible et accepte un tableau.
Ce filtre va décrypter toute chaine grâce aux paramètres utilisés. Des adaptateurs sont utilisés.
Actuellement des aptateurs existent pour les extensions Mcrypt
et OpenSSL
de php.
Pour plus de détails sur l'encryptage de contenu, voyez le filtre Encrypt
. La
documentation de celui-ci couvre les bases en matière de cryptage, nous n'aborderons ici que
les méthodes utilisées pour le décryptage.
Pour décrypter une données cryptées avec Mcrypt
, vous avez besoin des paramètres
utilisés pour encrypter, ainsi que du vecteur.
Si vous n'aviez pas passé de vecteur spécifique à l'encryptage, alors vous devriez récupérer
le vecteur utilisé grâce à la méthode getVector()
. Sans ce vecteur, aucun décryptage
de la données originale n'est possible.
Le décryptage s'effectue aussi simplement que l'encryptage.
// Utilisation des paramètres blowfish par défaut $filter = new Zend_Filter_Decrypt('myencryptionkey'); // Utilisation du vecteur utilisé lors de l'encryptage $filter->setVector('myvector'); $decrypted = $filter->filter('texte_encodé_non_lisible'); print $decrypted;
Note
Si l'extension mcrypt n'est pas présente dans votre environement, une exception sera levée.
Note
Vos paramètres sont vérifiés à la création de l'instance ou à l'appel de setEncryption(). Si mcrypt détecte des problèmes avec ces paramètres, une exception sera levée.
Le décryptage avec OpenSSL
est aussi simple que l'encryptage. Mais vous aurez besoin de toutes
les données concernant la personne ayant crypté la donnée de référence.
Pour décrypter avec OpenSSL
vous devez posséder:
-
private: votre clé privée. Ce peut être un nom de fichier ou juste le contenu de ce fichier : la clé.
-
envelope: la clé enveloppe cryptée de l'utilisateur qui a crypté le document. Un chemin de fichier ou une chaine peuvent être utilisés. Lorsque l'option package est paramétrée, vous pouvez omettre ce paramètre.
-
package: si la clé enveloppe a été empaqueté avec la valeur encryptée. Par défaut vaut
FALSE
.
// Utilise OpenSSL avec une clé spécifiée $filter = new Zend_Filter_Decrypt(array( 'adapter' => 'openssl', 'private' => '/path/to/mykey/private.pem' )); // Passage des clés enveloppe $filter->setEnvelopeKey(array( '/key/from/encoder/first.pem', '/key/from/encoder/second.pem' ));
Note
L'adaptateur OpenSSL
ne fonctionnera pas avec des clés non valides.
Optionnellement il peut être nécessaire de passer la passphrase pour décrypter les clés
elles-mêmes. Utilisez alors setPassphrase()
.
// Utilise OpenSSL avec une clé spécifiée $filter = new Zend_Filter_Decrypt(array( 'adapter' => 'openssl', 'private' => '/path/to/mykey/private.pem' )); // Passage des clés enveloppe $filter->setEnvelopeKey(array( '/key/from/encoder/first.pem', '/key/from/encoder/second.pem' )); $filter->setPassphrase('mypassphrase');
Enfin, décryptez le contenu. Voici l'exemple complet:
// Utilise OpenSSL avec une clé spécifiée $filter = new Zend_Filter_Decrypt(array( 'adapter' => 'openssl', 'private' => '/path/to/mykey/private.pem' )); // Passage des clés enveloppe $filter->setEnvelopeKey(array( '/key/from/encoder/first.pem', '/key/from/encoder/second.pem' )); $filter->setPassphrase('mypassphrase'); $decrypted = $filter->filter('texte_encodé_illisible'); print $decrypted;
Retourne la chaine $value
, mais uniquement les chiffres
la composant.
Il n'y a pas d'option supplémentaire pour Zend_Filter_Digits
.
Ce filtre retournera le dossier dans une chaine représentant le chemin vers un fichier.
Ce filtre va crypter toute chaine avec les paramètres spécifiés. Des adaptateurs sont utilisés.
Actuellement, il existe des adaptateurs pour les extensions PHP Mcrypt
et
OpenSSL
.
Comme ces deux méthodes d'encryptage sont très différentes, l'utilisation de leurs adaptateurs l'est aussi.
// Utiliser Mcrypt $filter1 = new Zend_Filter_Encrypt(array('adapter' => 'mcrypt')); // Utiliser OpenSSL $filter2 = new Zend_Filter_Encrypt(array('adapter' => 'openssl'));
Les méthodes setAdapter()
et getAdapter()
existent aussi.
// Utiliser Mcrypt $filter = new Zend_Filter_Encrypt(); $filter->setAdapter('openssl');
Note
Si vous ne précisez pas d'adaptateur, Mcrypt
est utilisé par défaut.
Cet adaptateur nécessite la présence de l'extension PHP Mcrypt
. Voici ses options:
-
key: La clé d'encryptage. Cette même clé sera nécessaire pour le décryptage.
-
algorithm: L'algorithme à utiliser pour le cryptage. Voyez PHP's mcrypt ciphers. Si non précisé,
blowfish
sera utilisé par défaut. -
algorithm_directory: Le dossier dans lequel se trouve l'algorithme. Si non précisé, le dossier spécifié par l'extension mcrypt est alors utilisé.
-
mode: Le mode de cryptage à utiliser. Un des modes mcrypt doit être utilisé. Par défaut,
cbc
est utilisé. -
mode_directory: Le dossier dans lequel se trouve le mode. Si non précisé, le dossier spécifié par l'extension mcrypt est alors utilisé.
-
vector: Le vecteur d'initialisation à utiliser. Un vecteur aléatoire est utilisé si non précisé.
-
salt: Si la clé doit être utilisé comme grain de sel. Dans ce cas la clé utilisée pour le cryptage sera elle même cryptée. Par défaut false : ce n'est pas le cas.
Si vous passez une chaine à la place d'un tableau pour la clé, celle-ci sera utilisée.
Les méthodes getEncryption()
et setEncryption()
sont aussi présentes.
Note
Une exception sera levée si l'extension PHP mcrypt n'est pas disponible.
Note
Notez aussi que tous vos paramètres utilisés à la création de l'instance ou avec setEncryption() vont être vérifiés. Si mcrypt détecte un problème, une exception sera levée.
getVector()
et setVector()
sont aussi disponibles si besoin.
Une chaine passée sera mise à la taille du vecteur pour être utilisée avec l'algorithme en cours.
Note
Notez que si vous n'utilisez pas un vecteur spécifique, alors vous devrez le récupérer et le stocker. En effet, celui-ci est indispensable pour décoder la valeur dans le futur.
// Utilise blowfish par défaut $filter = new Zend_Filter_Encrypt('myencryptionkey'); // Affecte un vecteur précis. $filter->setVector('myvector'); // $filter->getVector(); est nécessaire sinon, pour décoder la valeur plus tard $encrypted = $filter->filter('text_to_be_encoded'); print $encrypted; // Pour le décryptage, voyez le code du filtre Decrypt
Lorsque vous avez installé l'extension PHP OpenSSL
, vous pouvez utiliser l'adaptateur
du même nom, dont voici les options d'instanciation:
-
public: La clé publique de l'utilisateur auquel vous voulez proposer du contenu crypté. Plusieurs clés peuvent être spécifiées via un tableau. Il est possible de préciser le contenu de la clé, ou alors un chemin vers une clé.
-
private: Votre clé privée utilisée pour crypter le contenu. La encore la clé peut être précisée sous forme textuelle, ou alors un chemin vers un fichier contenant la clé.
getPublicKey()
et setPublicKey()
sont aussi présentes, ainsi que
getPrivateKey()
et setPrivateKey()
.
// Utiliser openssl $filter = new Zend_Filter_Encrypt(array( 'adapter' => 'openssl', 'private' => '/path/to/mykey/private.pem' )); // utilisation des méthodes $filter->setPublicKey(array( '/public/key/path/first.pem', '/public/key/path/second.pem' ));
Note
Attention l'adaptateur OpenSSL
ne fonctionnera pas si vous ne passez pas des clés
valides.
Si vous souhaitez encoder aussi les clés, passez alors une passphrase via
setPassphrase()
. Attention, la passphrase sera nécessaire pour décoder les clés.
// Utilise openssl avec une clé privée $filter = new Zend_Filter_Encrypt(array( 'adapter' => 'openssl', 'private' => '/path/to/mykey/private.pem' )); // utilisation des méthodes pour specifier la clé publique $filter->setPublicKey(array( '/public/key/path/first.pem', '/public/key/path/second.pem' )); $filter->setPassphrase('mypassphrase');
Pour décrypter le document, la passphrase (si utilisée) et les clés enveloppe sont nécessaires.
Ceci signifie que vous devez appeler la méthode getEnvelopeKey()
après le cryptage
pour récupérer l'enveloppe.
Voici donc un exemple complet de cryptage de données avec OpenSSL
.
// Utilisons openssl avec une clé privée $filter = new Zend_Filter_Encrypt(array( 'adapter' => 'openssl', 'private' => '/path/to/mykey/private.pem' )); // Voici la clé publique $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; // Le décryptage est expliqué dans le filtre Decrypt
Retourne la chaine $value
en convertissant les caractères en leur entité
HTML équivalente si elle existe.
Les options suivantes sont supportées par Zend_Filter_HtmlEntities
:
-
quotestyle: Equivalent au paramètre quote_style de la fonction PHP htmlentities. Ceci permet de définir ce qui sera fait avec les 'simples' et "doubles" quotes. Les constantes suivantes sont acceptées:
ENT_COMPAT
,ENT_QUOTES
ENT_NOQUOTES
, par défaut il s'agira deENT_COMPAT
. -
charset: Equivalent au paramètre charset de la fonction PHP htmlentities. Ceci indique le jeu de caractères à utiliser pour le filtre. Contrairement à la fonction PHP native, la valeur par défaut est 'UTF-8'. Voyez "http://php.net/htmlentities" pour la liste des jeux de caractères supportés.
Note
Cette option peut être passées via le paramètre
$options
comme un tableau ou objetZend_Config
. L'encodage ou le jeu de caractères seront reconnus. -
doublequote: Equivalent au paramètre double_encode de la fonction PHP htmlentities. Si passé à false, les entités html existantes ne seront pas encodées. Par défaut sur true (conversion totale).
Note
Cette option peut être passée via le paramètre
$options
ou la méthodesetDoubleEncode()
.
Voyez l'exemple qui suit pour le comportement de ce filtre.
$filter = new Zend_Filter_HtmlEntities(); print $filter->filter('<');
Zend_Filter_HtmlEntities
permet de changer les styles de quote
à filtrer. Ceci est utile si vous voulez laisser intactes les doubles, simples ou les deux
types de quotes. Voici un exemple:
$filter = new Zend_Filter_HtmlEntities(array('quotestyle' => ENT_QUOTES)); $input = "A 'single' and " . '"double"'; print $filter->filter($input);
Ceci affiche A 'single' and "double". Notez que les 'simples' et les "doubles" quotes ont été filtrées.
$filter = new Zend_Filter_HtmlEntities(array('quotestyle' => ENT_COMPAT)); $input = "A 'single' and " . '"double"'; print $filter->filter($input);
L'exemple ci-dessus affichera A 'single' and "double". Notez que seules les "doubles" quotes ont été filtrées.
$filter = new Zend_Filter_HtmlEntities(array('quotestyle' => ENT_NOQUOTES)); $input = "A 'single' and " . '"double"'; print $filter->filter($input);
L'exemple ci-dessus affichera A 'single' and "double". Notez qu'ici aucune des "doubles" ou 'simples' quotes n'ont été altérées.
Pour changer ou récupérer la valeur de quotestyle après instantiation,
les méthodes setQuoteStyle()
et
getQuoteStyle()
peuvent être utilisées.
setQuoteStyle()
accepte un paramètre
$quoteStyle
. Les constantes suivantes sont autorisées:
ENT_COMPAT
, ENT_QUOTES
,
ENT_NOQUOTES
$filter = new Zend_Filter_HtmlEntities(); $filter->setQuoteStyle(ENT_QUOTES); print $filter->getQuoteStyle(ENT_QUOTES);
Pour changer ou récupérer la valeur de charset après instantiation,
les méthodes setCharSet()
et getCharSet()
peuvent être utilisées. setCharSet()
accepte un paramètre
$charSet
. Voyez "http://php.net/htmlentities" pour une liste des valeurs
acceptées.
$filter = new Zend_Filter_HtmlEntities(); $filter->setQuoteStyle(ENT_QUOTES); print $filter->getQuoteStyle(ENT_QUOTES);
Pour changer ou récupérer la valeur de doublequote après instantiation,
les méthodes setDoubleQuote()
et
getDoubleQuote()
peuvent être utilisées.
setDoubleQuote()
accepte un booléen
$doubleQuote
.
$filter = new Zend_Filter_HtmlEntities(); $filter->setQuoteStyle(ENT_QUOTES); print $filter->getQuoteStyle(ENT_QUOTES);
Zend_Filter_Int
permet de transformer une valeur scalaire contenant un
chiffre en entier.
Ce filtre va transformer toute entrée localisée en sa représentation normalisée. La transformation est effectuée
grâce à Zend_Locale
en interne.
Ceci permet à l'utilisateur de saisir des information dans sa propre locale, et du coté serveur de stocker les informations normalisées relatives.
Note
Attention la normalisation n'est pas de la traduction. Ce filtre ne sait pas traduire des chaines d'un langage à un autre.
Les types suivants peuvent être normalisés:
-
entiers: Nombres entiers localisés. Ils seront normalisés dans la notation anglaise internationnale.
-
float: Nombres flottants. Ils seront normalisés dans la notation anglaise internationnale.
-
nombres: Nombres réels. Ils seront normalisés dans la notation anglaise internationnale.
-
time: Valeurs de temps. Normalisées sous forme de tableaux.
-
date: Valeurs de date. Normalisées sous forme de tableaux.
Tout autre type d'entrée sera retourné tel quel, sans tranformation, par ce filtre.
Note
Notez bien que toute sortie normalisée de ce filtre est de type chaine de caractères.
Tout type de nombre peut être normalisé, excepté les nombres représentant une notation scientifique.
Voici un exemple:
// Initialise le filtre $filter = new Zend_Filter_LocalizedToNormalized(); $filter->filter('123.456,78'); // retourne '123456.78'
Imaginons que nous utilisoons la locale 'de' de manière globale sur toute l'application.
Zend_Filter_LocalizedToNormalized
va utiliser cette locale là pour calculer sa sortie.
Il est possible de contrôler la normalisation des nombres. Toute options accépté par
Zend_Locale_Format
peut alors être utilisée. Les plus courantes sont:
-
date_format
-
locale
-
precision
Pour plus de détails à ce sujet, voyez le chapitre Zend_Locale.
Voici un exemple utilisant la précision:
// Numeric Filter $filter = new Zend_Filter_LocalizedToNormalized(array('precision' => 2)); $filter->filter('123.456'); // retourne '123456.00' $filter->filter('123.456,78901'); // retourne '123456.79'
Les dates et temps peuvent être normalisés eux aussi. La sortie du filtre sera alors toujours de type tableau.
// Initialise le filtre $filter = new Zend_Filter_LocalizedToNormalized(); $filter->filter('12.April.2009'); // retourne array('day' => '12', 'month' => '04', 'year' => '2009')
Imaginons une fois de plus une locale globale 'de'. L'entrée est donc automatiquement reconnue comme date et vous aurez un tableau en sortie.
Vous pouvez contrôler la transformation du filtre grâce aux paramètres date_format et locale.
// Date Filter $filter = new Zend_Filter_LocalizedToNormalized( array('date_format' => 'ss:mm:HH') ); $filter->filter('11:22:33'); // retourne array('hour' => '33', 'minute' => '22', 'second' => '11')
Ce filtre est l'inverse de
Zend_Filter_LocalizedToNormalized
et convertira toute entrée normalisée
en entrée localisée. Il utilise Zend_Locale
pour celà.
Ceci permet de représenter une valeur normalisée dans la locale de l'utilisateur, qu'il reconnaitra donc sans problème.
Note
Notez bien que la localisation n'est pas de la traduction, ce filtre ne sait pas traduire des chaines d'une langue à l'autre (comme des noms de jours ou de mois).
Les types suivants peuvent être localisés:
-
entiers: Nombres entiers.
-
float: Nombres flottants.
-
nombres: Autres nombres, comme les réels.
-
temps: Valeurs de temps, localisées sous forme de chaines.
-
date: Valeurs de dates, localisées sour forme de chaines.
Tout autre type d'entrée sera retourné tel quel, sans transformation.
Tout type de nombre peut être localisé, à l'exception des nombres représentant une notation scientifique.
Comment fonctionne la localisation pour les nombres ?:
// Initialise le filtre $filter = new Zend_Filter_NormalizedToLocalized(); $filter->filter(123456.78); // retourne '123.456,78'
Imaginons que vous avez affecté une locale 'de' comme locale de l'application.
Zend_Filter_NormalizedToLocalized
va utiliser cette locale
pour détecter le type de sortie à produire, ceci sous forme de chaine de caractères.
Il est aussi possible de contrôler le look de vos nombres localisés. Pour cela vous pouvez préciser toute option
que Zend_Locale_Format
reconnait. Les plus courantes sont:
-
date_format
-
locale
-
precision
Pour plus de détails sur ces options, voyez le chapitre sur Zend_Locale .
Voici un exemple utilisant ces options:
// Numeric Filter $filter = new Zend_Filter_NormalizedToLocalized(array('precision' => 2)); $filter->filter(123456); // retourne '123.456,00' $filter->filter(123456.78901); // retourne '123.456,79'
Les dates et les temps peuvent aussi être localisés. Des chaines de caractères sont alors retournées, agissant avec la locale définie.
// Initialise le filtre $filter = new Zend_Filter_NormalizedToLocalized(); $filter->filter(array('day' => '12', 'month' => '04', 'year' => '2009'); // retoures '12.04.2009'
Imaginons que vous ayiez spécifié la locale 'de' au niveau de l'application, celle-ci est alors automatiquement détectée et utilisée pour localiser la date.
Bien sûr, vous pouvez contrôler le format d'affichage de vos dates, grâce aux paramètres date_format et locale.
// Date Filter $filter = new Zend_Filter_LocalizedToNormalized( array('date_format' => 'ss:mm:HH') ); $filter->filter(array('hour' => '33', 'minute' => '22', 'second' => '11')); // retourne '11:22:33'
Ce filtre retournera la valeur NULL
si des critères précis sont rencontrés.
C'est souvent nécessaire lorsqu'on travaille avec des bases de données et que l'on souhaite une
valeur NULL
plutôt qu'un booléen ou tout autre type.
Par défaut, ce filtre fonctionne comme la fonction PHP
empty()
. Donc si
empty()
retourne true sur la valeur, alors
NULL
sera retourné par ce filtre
$filter = new Zend_Filter_Null(); $value = ''; $result = $filter->filter($value); // retourne null plutôt que la chaine vide
Ceci signifie qu'en l'absence d'une configuration spéciale,
Zend_Filter_Null
accepte tout type en entrée et retourne
NULL
dans les mêmes cas que empty()
.
Toute autre valeur sera retournée telle quelle, sans aucune modification.
Quelques fois ça ne suffit pas de filtrer en se basant sur empty()
. Ainsi,
Zend_Filter_Null
permet de déclarer quels types seront convertis.
Les types suivants sont gérés:
-
booleen: Convertit le booléen
FALSE
enNULL
. -
entier: Convertit l'entier 0 en
NULL
. -
tableau_vide: Convertit le tableau vide en
NULL
. -
chaine: Convertit la chaine vide '' en
NULL
. -
zero: Convertit la chaine zéro ('0') en
NULL
. -
tout: Convertit tous les types cités en
NULL
. (comportement par défaut).
Il existe plusieurs manières de spécifier les types à filtrer, des constantes, des types ajoutés à la suite, des chaines de caractères, un tableau... Voyez les exemples suivants:
// convertit false en null $filter = new Zend_Filter_Null(Zend_Filter_Null::BOOLEAN); // convertit false et 0 en null $filter = new Zend_Filter_Null( Zend_Filter_Null::BOOLEAN + Zend_Filter_Null::INTEGER ); // convertit false et 0 en null $filter = new Zend_Filter_Null( array( Zend_Filter_Null::BOOLEAN, Zend_Filter_Null::INTEGER )); // convertit false et 0 en null $filter = new Zend_Filter_Null(array( 'boolean', 'integer', ));
Un objet Zend_Config
peut aussi être utilisé pour préciser les types.
La méthode setType()
existe de même.
Zend_Filter_PregReplace
performs a search using regular expressions
and replaces all found elements.
The option match has to be given to set the pattern which will be searched for. It can be a string for a single pattern, or an array of strings for multiple pattern.
To set the pattern which will be used as replacement the option replace has to be used. It can be a string for a single pattern, or an array of strings for multiple pattern.
$filter = new Zend_Filter_PregReplace(array('match' => '/bob/', 'replace' => 'john')); $input = 'Hy bob!'; $filter->filter($input); // returns 'Hy john!'
You can use getMatchPattern()
and
setMatchPattern()
to set the matching pattern afterwards. To set
the replacement pattern you can use getReplacement()
and
setReplacement()
.
$filter = new Zend_Filter_PregReplace(); $filter->setMatchPattern(array('bob', 'Hy')) ->setReplacement(array('john', 'Bye')); $input = 'Hy bob!"; $filter->filter($input); // returns 'Bye john!'
For a more complex usage take a look into PHP's PCRE Pattern Chapter.
Ce filtre va résoudre un lien ou un chemin en chemin absolu canonique. Toutes références à
'/./'
, '/../'
et tout ajout supplémentaire de
'/'
sera résolu ou supprimé. Aucun caractère de lien symbolique ne sera
présent dans le résultat ('/./'
ou '/../'
)
Zend_Filter_RealPath
retourne FALSE
en cas d'echec
par exemple si le fichier n'existe pas. Sur les systems BSD,
Zend_Filter_RealPath
n'échoue pas si seule la dernière partie du chemin
n'existe pas, les autres systèmes retourneront FALSE
.
$filter = new Zend_Filter_RealPath(); $path = '/www/var/path/../../mypath'; $filtered = $filter->filter($path); // retourne '/www/mypath'
Il peut être nécessaire quelques fois de vouloir utiliser ce filtre sur des chemins inexistants.
Par exemple récupérer le realpath d'un chemin à créer. Dans ce cas vous pouvez passer
FALSE
au constructeur, ou utiliser setExists()
.
$filter = new Zend_Filter_RealPath(false); $path = '/www/var/path/../../non/existing/path'; $filtered = $filter->filter($path); // retourne '/www/non/existing/path' même si file_exists ou realpath retourneraient false
Ce filtre convertit toute entrée vers des caractères minuscules.
$filter = new Zend_Filter_StringToLower(); print $filter->filter('SAMPLE'); // retourne "sample"
Par défaut, seul le jeu de caractères de la locale en cours sera utilisé. Les caractères provenant
d'autres jeux seront ignorés. Cela reste possible de les passer en minuscules si l'extension mbstring
est présente dans votre environnement PHP. Indiquez l'encodage voulu à la création du filtre
StringToLower
ou utilisez sa méthode
setEncoding()
.
// utiliser UTF-8 $filter = new Zend_Filter_StringToLower('UTF-8'); // ou passer un tableau $filter = new Zend_Filter_StringToLower(array('encoding' => 'UTF-8')); // ou encore faire cela après coup $filter->setEncoding('ISO-8859-1');
Préciser des mauvais encodages
Attention une exception sera levée si vous précisez un encodage alors que l'extension mbstring est absente.
Une exception sera de même levée si l'encodage que vous précisez n'est pas pris en compte par mbstring.
Ce filtre convertit toute entrée vers une casse majuscule.
$filter = new Zend_Filter_StringToUpper(); print $filter->filter('Sample'); // retourne "SAMPLE"
Tout comme le filtre StringToLower
, seul le jeu de
caractères de la locale en cours sera utilisé. Son fonctionnement est le même
que celui de StringToLower
.
$filter = new Zend_Filter_StringToUpper(array('encoding' => 'UTF-8')); // ou encore $filter->setEncoding('ISO-8859-1');
Ce filtre modifie la chaine pour que certains caractères soient supprimés du début et de la fin de la chaine.
Les options suivantes sont gérées par Zend_Filter_StringTrim
:
-
charlist: Liste de caractères à supprimer du début et de la fin de la chaine. Si non précisé, le comportement par défaut sera de supprimer les espaces du début et de la fin de la chaine.
Voici un exemple de base:
$filter = new Zend_Filter_StringTrim(); print $filter->filter(' This is (my) content: ');
Ceci affichera 'This is (my) content:'. Notez que les espaces ont été supprimés.
$filter = new Zend_Filter_StringTrim(':'); // ou new Zend_Filter_StringTrim(array('charlist' => ':')); print $filter->filter(' This is (my) content:');
Ceci affichera 'This is (my) content'. Notez que les espaces et le double-point ont
été supprimés. Vous pouvez aussi passer une instance de
Zend_Config
ou un tableau avec la clé 'charlist'. Les méthodes
setCharList()
et getCharList()
sont
aussi disponibles.
Ce filtre retourne une chaîne, où toutes les balises HTML et PHP sont supprimées, exceptées celles qui sont explicitement autorisées. En plus de pouvoir spécifier quelles balises sont autorisées, les développeurs peuvent spécifier quels attributs sont autorisés soit pour toutes les balises autorisées soit pour des balises spécifiques seulement.