Filtrer vos inputs avec les fonctions filter_ de PHP
“Filtrer les entrées et échapper les sorties” est un standard des plus basiques de PHP. Ce concept implique qu’il ne faut jamais faire confiances aux données provenant de l’utilisateur, ceux ci doivent toujours être filtrées a l’entrée et échappées lors de l’affichage. Ceci peut être parfois chiant surtout quand on commence a avoir a jouer avec des expressions régulières. Heureusement et depuis la version 5.2.0 de PHP, ceci est rendu beaucoup plus facile. En effet, depuis cette version, PHP inclut par défaut la librairie Filter .
La méthode classique par exemple pour filtrer une adresse Email est d’utiliser une expression régulière comme suit :
$email = 'nom.prenom@exemple.com';
$expression = "/^[^0-9][A-z0-9_]+([.][A-z0-9_]+)*[@][A-z0-9_]+([.][A-z0-9_]+)*[.][A-z]{2,4}$/";
if (preg_match($expression, $email))
{
echo "Cette adresse est valide.";
}
else
{
echo "Cette adresse est invalide";
}
Le protocole de filtrage facilite cette tache en offrant un filtre pour la validation des adresses Email :
$email = 'nom.prenom@exemple.com';
if(filter_var($email, FILTER_VALIDATE_EMAIL) !== false)
{
echo "Cette adresse est valide."
}
else
{
echo "Cette adresse est invalide.";
}
Utiliser la deuxième solution a plusieurs bénéfices. Premièrement, il rend le code plus lisible. vous n’aurez plus a valider l’expression régulière et la connaître pour voir ce qu’elle est sensée valider. Secundo, il réduit le pourcentage d’erreur.
voici un deuxieme exemple qui utilise la fonction filter_input qui a pour role de recuperer une variable externe (GET, POST, SESSION, COOKIE etc.) et la filtre
$search_html = filter_input(INPUT_GET, 'search', FILTER_SANITIZE_SPECIAL_CHARS);
$search_url = filter_input(INPUT_GET, 'search', FILTER_SANITIZE_ENCODED);
echo "Vous avez recherché $search_html.\n";
echo "Nouvelle recherche.";
Ce code affiche
Vous avez recherché Me & son. <a href='?search=Me%20%26%20son'>Nouvelle recherche.</a>
Il existe un nombre de validateurs et de filtres que vous pouvez utiliser, ils se divisent essentiellement en deux types: les filtres de validation et les filtres de nettoyage. ils incluent le test sur les types (chaines de caracteres, entiers et booleens etc), le test d’URLS, d’IP etc. Ces fonctions sont toujours plus rapides que n’importe quelle fonction que vous ecrivez puisqu’ils sont ecrites directement en C.