filter_var()
PHP propose filter_var() pour valider et assainir les données utilisateur : emails, entiers, URL et bien plus.
Introduction
filter_var() est l'outil intégré de PHP pour valider et assainir une valeur unique. Valider signifie vérifier si une valeur correspond à un format attendu (un vrai e-mail, un entier dans une plage, une URL valide) et retourner la valeur si c'est le cas, ou false sinon. Assainir signifie nettoyer une valeur en supprimant ou en échappant les caractères indésirables.
Ne faites jamais confiance aux données provenant de l'extérieur de votre script — champs de formulaire, chaînes de requête, cookies, payloads d'API. Les passer par filter_var() avant de les stocker, les afficher ou les utiliser est l'un des moyens les plus simples de garder votre application sécurisée et prévisible. Cette page couvre la syntaxe, les deux modes (validation vs. assainissement), les filtres et indicateurs courants, ainsi que les pièges fréquents.
Syntaxe
filter_var(mixed $value, int $filter = FILTER_DEFAULT, array|int $options = 0): mixed| Paramètre | Obligatoire | Description |
|---|---|---|
$value | oui | La valeur à filtrer. |
$filter | non | L'identifiant du filtre à appliquer, par exemple FILTER_VALIDATE_INT. Par défaut FILTER_DEFAULT, qui n'effectue aucun filtrage. |
$options | non | Un tableau associatif d'options/indicateurs, ou une constante d'indicateur unique, pour affiner le filtre. |
Valeur de retour : la valeur filtrée (et éventuellement convertie) en cas de succès, ou false en cas d'échec. Notez qu'un filtre de validation retourne la valeur elle-même — comparez donc toujours avec === lorsque la valeur valide pourrait être fausse (comme 0 ou une chaîne vide).
Validation des données
La validation répond à une question oui/non : cette valeur est-elle acceptable ? Le filtre retourne la valeur en cas de succès et false en cas d'échec.
Valider une adresse e-mail
Les filtres de validation les plus utiles sont :
| Filtre | Valide |
|---|---|
FILTER_VALIDATE_INT | Un entier (optionnellement dans une plage min_range/max_range). |
FILTER_VALIDATE_FLOAT | Un nombre à virgule flottante. |
FILTER_VALIDATE_BOOLEAN | "1", "true", "on", "yes" → true ; "0", "false", "off", "no", "" → false. |
FILTER_VALIDATE_EMAIL | Une adresse e-mail. |
FILTER_VALIDATE_URL | Une URL. |
FILTER_VALIDATE_IP | Une adresse IPv4/IPv6. |
FILTER_VALIDATE_REGEXP | Une valeur correspondant à un motif PCRE. |
Le piège de === false
Puisqu'un filtre de validation retourne la valeur, un résultat de 0 ou "0" est valide mais faux. Utilisez toujours une comparaison stricte :
Assainissement des données
L'assainissement ne rejette pas une valeur — il la nettoie et retourne la chaîne nettoyée.
Assainir une adresse e-mail
Filtres d'assainissement courants :
| Filtre | Effet |
|---|---|
FILTER_SANITIZE_EMAIL | Supprime les caractères interdits dans un e-mail. |
FILTER_SANITIZE_URL | Supprime les caractères interdits dans une URL. |
FILTER_SANITIZE_NUMBER_INT | Conserve les chiffres et +/-. |
FILTER_SANITIZE_NUMBER_FLOAT | Conserve les chiffres, +/-, et (avec des indicateurs) .,e. |
FILTER_SANITIZE_SPECIAL_CHARS | Encode en HTML <, >, &, " et autres. |
FILTER_SANITIZE_FULL_SPECIAL_CHARS | Comme htmlspecialchars() avec ENT_QUOTES. |
Remarque :
FILTER_SANITIZE_STRINGa été déprécié dans PHP 8.1. Pour nettoyer des chaînes destinées à la sortie HTML, préférezhtmlspecialchars()au moment de l'affichage.
Utilisation des options et des indicateurs
Le troisième argument affine un filtre. Passez-le sous forme d'un tableau avec 'options' (et optionnellement 'flags') :
Les indicateurs peuvent également être passés directement comme troisième argument lorsque vous n'avez pas besoin de la forme tableau :
Validation vs. assainissement — quand utiliser lequel
- Valider quand vous avez besoin d'une décision oui/non : rejeter la requête, afficher une erreur, réessayer. Utilisez les filtres de validation pour les e-mails, les nombres, les URL et les adresses IP dans les formulaires et les API.
- Assainir quand vous devez accepter la saisie mais souhaitez la nettoyer des caractères dangereux ou parasites avant utilisation.
- Les deux sont complémentaires — un schéma courant consiste à valider en entrée et à échapper (par exemple avec
htmlspecialchars()) en sortie, plutôt que de se fier uniquement aux filtres d'assainissement.
Pièges courants
- Un filtre de validation retourne la valeur, pas
true. Comparez avec=== falsepour détecter un échec. filter_var()fonctionne sur une seule valeur scalaire. Pour filtrer plusieurs valeurs à la fois, utilisezfilter_var_array()ou, pour les données de requête,filter_input_array().FILTER_VALIDATE_BOOLEANretournenull(pasfalse) pour les valeurs non reconnues uniquement si vous passezFILTER_NULL_ON_FAILURE; sinon il retournefalse.- Ne vous fiez pas aux filtres d'assainissement pour l'échappement en sortie critique pour la sécurité — échappez au moment du rendu à la place.
Sujets connexes
filter_var_array()— filtrer plusieurs variables en un seul appel.filter_input_array()— filtrer les données de requête ($_GET,$_POST).- Validation de formulaire PHP — mettre ces filtres en pratique sur de vrais formulaires.
- Valider URL et e-mail en PHP
htmlspecialchars()— échappement pour une sortie HTML sécurisée.trim()— supprimer les espaces blancs avant le filtrage.
Conclusion
filter_var() est une manière compacte et fiable de valider et d'assainir des valeurs individuelles en PHP. Utilisez les filtres de validation pour accepter ou rejeter les saisies, les filtres d'assainissement pour les nettoyer, et n'oubliez pas de comparer les résultats de validation avec === false. Combiné à filter_var_array() pour les données en masse et à htmlspecialchars() pour la sortie, il constitue la base d'une gestion sécurisée des entrées.