Étant donné les deux extraits de code HTML/PHP suivants:
<input type="text" name="firstname" value="<?php echo $_POST['firstname']; ?>" />
et
<textarea name="content"><?php echo $_POST['content']; ?></textarea>
quel encodage de caractères dois-je utiliser pour les variables $_POST
avec écho? Puis-je utiliser toutes les fonctions PHP intégrées? Veuillez supposer que les valeurs $_POST
N'ont pas encore été codées. Aucune magie ne cite rien.
Utilisez htmlspecialchars($_POST['firstname'])
et htmlspecialchars($_POST['content'])
.
Toujours échapper les chaînes avec htmlspecialchars()
avant de les montrer à l'utilisateur.
htmlspecialchars fonctionnerait dans les deux cas. Examinez les différentes options de drapeau pour éviter que les guillemets ne posent problème dans le cas input
.
Étant donné que c'est un peu long, je le mettrais dans une fonction
<?PHP
function encodeValue ($s) {
return htmlentities($s, ENT_COMPAT|ENT_QUOTES,'ISO-8859-1', true);
}
?>
Ceci a ENT_QUOTES pour s’assurer que les guillemets simples et doubles sont codés, mais il faudra aussi coder pour les caractères spéciaux (comme dans José) au lieu d’insérer une chaîne vide.
Ensuite, vous pouvez faire:
<input type="text" name="firstname" value="<?= encodeValue($_POST['firstname']) ?>" />
et
<textarea name="content"><?= encodeValue($_POST['content']) ?></textarea>