web-dev-qa-db-fra.com

Comment échapper correctement aux valeurs par défaut du formulaire html en php?

É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.

61
Ryan

Utilisez htmlspecialchars($_POST['firstname']) et htmlspecialchars($_POST['content']).

Toujours échapper les chaînes avec htmlspecialchars() avant de les montrer à l'utilisateur.

92
rid

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.

4
Niklas

É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>
1
Eric