htmlentities suivi de html_entity_decode...

Paul Volfoni
Invité n'ayant pas de compte PHPfrance

01 juil. 2006, 18:44

Bonjour,

Je travaille sur un formulaire intitulé "form_a.php", dont je veux réafficher les données dans la page "form_b.php" après analyse par le fichier "form_an.php".

J'ai lu dans la documentation Php que la fonction htmlentities permettait de "nettoyer" les zones de texte, et éviter l'insertion de codes malicieux.

Première question : ai-je bien compris l'intérêt de htmlentities ?

Ainsi, par exemple, pour un champ prénom, j'utilise le code suivant dans "form_an.php" :
$_POST['prenom'] = htmlentities($_POST['prenom']);
Je transforme ensuite ma variable $_POST en variable $_SESSION et, miracle, le prénom s'affiche correctement dans ma page form_b.php.

Seulement voilà... Htmlentities fonctionne et transforme (évidemment !) en caractères spéciaux mes "é", "ç"... Or, je ne veux pas de ces caractères spéciaux...

En effet, après m'être battu longuement avec MySql, j'ai renoncé à coder en utf-8 pour me résoudre à utiliser un codage avec un charset 8859-1. J'ai décidé que les caractères spéciaux usuels seraient saisis au clavier. :wink:

Aussi, à l'affichage du code source de la page form_b.php, je me retrouve
avec des caractères spéciaux non codés et d'autres codés par htmlentities, et ça ne me plait guère. :cry:

D'où ma deuxième question. Est-il licite d'utiliser la fonction html_entity_decode juste après htmlentities ?

Ma syntaxe serait la suivante :
$_POST['prenom'] = htmlentities($_POST['prenom']);
$_POST['prenom'] = html_entity_decode($_POST['prenom']);
En d'autres termes, puis-je imaginer que Php "nettoye" mon code avec htmlentities et le laisse "propre" en le recodant ???

Merci mille fois pour vos précieux conseils.

Cordialement,

Paul

Eléphant du PHP | 413 Messages

01 juil. 2006, 19:04

salut,
ça ne sert à rien de faire htmlentities et decode just'après. c'est comme si tu n'avais rien fait.

htmlentities est utilisé généralement pour afficher un texte contenant des caractères suceptibles de poser problème à la page HTML.
Exemple :
$x = "x < y";
echo htmlentities($x);
dans ce cas, le caractère "<" est converti en "<" et ne posera pas de problème au HTML (qui sinon aurait pu croire avoir affaire à une balise <y> mal fermée).

en résumé, tu peux stocker tes variables telles quelles (sans l'aide de htmlentities), mais dès que tu les affiches, htmlentities est utile.
--
Goeb

Sebyy
Invité n'ayant pas de compte PHPfrance

04 juil. 2006, 15:27

Pour htmlentities tu peut faire ça :
$variable = htmlentities(strip_tags($_POST['pseudo'])) ;
Si je ne me trompe pas ce sont des balises de protection pour la Base De Donnée et évité l'éxécution des script et ainsi le piratage...