Nous travaillons dans plusieurs "univers" différents :
Les chaînes de caractères doivent souvent être codées ou décodées
pour satisfaire aux exigences des différents langages en ce qui
concerne la syntaxe et les caractères réservés.
Par exemple,
les signes > et < doivent être >
et < dans HTML pour être
interprété correctement. Un espace dans une adresse URL soit être
codé %20. Les guillemets simples, les
guillemets double et les backslashes doivent être protégés dans une
requêtes SQL.
PHP propose donc des fonctions pour nous
permettre de travailler facilement avec les chaînes de caractères
dans des environnement spécifiques.
Quand vous envoyez une chaîne au navigateur pour qu'il en fasse l'affichage (nous parlons ici d'une chaîne simple qui ne contient pas intentionnellement des tags HTML), il faut encoder les caractères spéciaux du langage HTML (<, >, &, ...) pour qu'ils ne soient pas interprétés comme éléments du langage, mais traités comme des éléments de texte.
La fonction htmlspecialchars() remplace le minimum de caractères spéciaux d'une chaîne par leur entité HTML :
La fonction htmlentities() remplace aussi ces caractères, mais également tous les caractères accentués.
Le premier paramètre à passer à ces 2 fonctions est la chaîne de caractères à modifier.
Viennent ensuite 2 paramètres à positionner surtout si la chaîne
n'est pas composée de caractères en ISO-8859-1 (les caractères des
alphabets occidentaux - cf français).
Par exemple, si les
chaînes que vous voulez afficher sont encodées en UTF-8, il faut
utiliser :
htmlspecialchars($chaine, ENT_QUOTES, 'UTF-8'); htmlentities($chaine, ENT_QUOTES, 'UTF-8');
La fonction strip_tags() permet d'enlever les tags HTML contenus dans une chaîne. Cette fonction peut être utilisée pour protéger vos sites si vous permettez par exemple que les utilisateurs saisissent des commentaires. Un utilisateur pourrait saisir des tags HTML dans ses commentaires (en particulier un tag <script> et du code JavaScript) qui seraient ensuite interprétés quand d'autres utilisateurs liraient les commentaires.
L'exemple suivant montre un texte contenant un tel type de code, et ensuite affiché dans la page
L'utilisation de strip_tags() permet d'éviter cette redirection (qui est un amusement par rapport à ce qui peut être fait).
La fonction get_meta_tags() renvoie un tableau contenant les tags meta d'une page HTML. Cette fonction peut être utilisée par exemple pour indexer un site, ou donner des informations sur des pages HTML.
Soit la page HTML suivante (test_meta.html dans le dossier "test") :
<!DOCTYPE html> <html lang="fr"> <head> <title>Page de test</title> <meta name="keywords" content="test, php, fonction"> <meta name="description" content="Page de test de la fonction get_meta_tags"> <meta name="author" content="François Piat"> </head> <body> Page de test pour la récupération des meta-tags </body> </html>
La fonction get_meta_tags() renverra le tableau suivant :
La plupart des bases de données demandent que dans les données qui leurs sont envoyées, les guillemets doubles ou simples, et les backslashes soient protégés par un backslash.
Par exemple, pour mettre le texte "C'est un texte "à problème"" dans un INSERT, nous emploierons la syntaxe suivante :
INSERT INTO latable (leChamp)
VALUES ('C\'est un texte \"à problème\"')
PHP fournit la fonction addslashes()
pour effectuer le travail à notre place.
Pour enlever les
backslashes de protection, nous pouvons utiliser la fonction stripslashes()
Nous verrons plus en détail dans le chapitre consacré à MySQL comment rendre ses protections plus efficaces, en particulier avec l'utilisation de la fonction dédiée mysqli_real_escape_string.