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 &gt; et &lt; 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.

Caractères spéciaux dans HTML

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');
Exemple : codage HTML

Enlever les tags HTML

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

Exemple : supprimer les tags HTML

L'utilisation de strip_tags() permet d'éviter cette redirection (qui est un amusement par rapport à ce qui peut être fait).

Exemple : supprimer les tags HTML

Meta tags

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 :

Exemple : meta-tags

Les caractères dans SQL

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()

Exemple : protéger les guillemets

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.