htmlspecialchars sans effet sur des donnees envoyees en POST
1 réponse
gvdmoort
Bonjour à tous,
Je n'y comprend rien !
J'ai un script qui extraie des données d'un table MySQL, les insère
dans un formulaire html pour les transmettre à un autre script.
Certaines de ces données textuelles comprenant des guillemets (") et
des apostrophes ('), j'ai utilisé htmlspecialchars, comme par exemple:
$titre=htmlspecialchars($titre, ENT_QUOTES);
voici le code du formulaire tel qu'il s'affiche dans ma page html, avec
la variable $titre dont on voit que les guillemets ont bien été
transformés:
Or, le script (ajouter.php) qui réceptionne ces données semble
toujours utiliser la variable sous sa forme initiale, avec les
guillemets bruts, ce qui pose évidemment problème dans le code html,
puisqu'une ligne comme
<input type="text" size="25" name="titre" value="Formation "taille
des arbres"">
s'affichera mal, le texte étant tronqué au guillemet.
Et quand j'affiche le code html ainsi obtenu dans mon navigateur, je
constate que les variables ont donc perdu
leur formattage sous forme d'entité html:
<!-- Formation "taille des arbres" -->
J'ignore si ce problème est lié à php, ou si c'est quelque chose qui
m'échappe dans le procole http, toujours est-il que toute explication
est la bienvenue, je coince complètement.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
O.L.
a exprimé avec précision : [...]
J'ignore si ce problème est lié à php, ou si c'est quelque chose qui m'échappe dans le procole http, toujours est-il que toute explication est la bienvenue, je coince complètement.
Merci d'avance,
Hello,
Je pense que c'est normal : le navigateur n'envoie pas <Formation "taille des arbres">, mais <Formation "taille des arbres">, car il convertit les trucs encodés (", é, etc) en caractères uniques (", é) lors de la soumission du formulaire. Si tu veux qu'après la soumission du formulaire, ton script recoive des données déjà converties et sans guillemets, il faut à mon avis faire un double htmlspecialchars() au départ : une première fois pour encoder les " en ", et une deuxième fois pour que le " soit converti en &quot; et puisse ensuite être réinterprété par le navigateur et envoyé en tant que ".
Donc concrètement, si j'étais toi, j'essaierai avec : $titre = htmlspecialchars(htmlspecialchars($titre, ENT_QUOTES), ENT_QUOTES);
@+ Olivier
PS : merci les modérateurs d'avoir supprimé mon premier post, j'espère que vous laisserez passer celui là !
-- Olivier Ligny Créateur web free-lance / www.cyber-tamtam.net
gvdmoort@skynet.be a exprimé avec précision :
[...]
J'ignore si ce problème est lié à php, ou si c'est quelque chose qui
m'échappe dans le procole http, toujours est-il que toute explication
est la bienvenue, je coince complètement.
Merci d'avance,
Hello,
Je pense que c'est normal : le navigateur n'envoie pas <Formation
"taille des arbres">, mais <Formation "taille des arbres">,
car il convertit les trucs encodés (", é, etc) en
caractères uniques (", é) lors de la soumission du formulaire.
Si tu veux qu'après la soumission du formulaire, ton script recoive des
données déjà converties et sans guillemets, il faut à mon avis faire un
double htmlspecialchars() au départ : une première fois pour encoder
les " en ", et une deuxième fois pour que le " soit converti
en &quot; et puisse ensuite être réinterprété par le navigateur et
envoyé en tant que ".
Donc concrètement, si j'étais toi, j'essaierai avec :
$titre = htmlspecialchars(htmlspecialchars($titre, ENT_QUOTES),
ENT_QUOTES);
@+
Olivier
PS : merci les modérateurs d'avoir supprimé mon premier post, j'espère
que vous laisserez passer celui là !
--
Olivier Ligny
Créateur web free-lance / www.cyber-tamtam.net
J'ignore si ce problème est lié à php, ou si c'est quelque chose qui m'échappe dans le procole http, toujours est-il que toute explication est la bienvenue, je coince complètement.
Merci d'avance,
Hello,
Je pense que c'est normal : le navigateur n'envoie pas <Formation "taille des arbres">, mais <Formation "taille des arbres">, car il convertit les trucs encodés (", é, etc) en caractères uniques (", é) lors de la soumission du formulaire. Si tu veux qu'après la soumission du formulaire, ton script recoive des données déjà converties et sans guillemets, il faut à mon avis faire un double htmlspecialchars() au départ : une première fois pour encoder les " en ", et une deuxième fois pour que le " soit converti en &quot; et puisse ensuite être réinterprété par le navigateur et envoyé en tant que ".
Donc concrètement, si j'étais toi, j'essaierai avec : $titre = htmlspecialchars(htmlspecialchars($titre, ENT_QUOTES), ENT_QUOTES);
@+ Olivier
PS : merci les modérateurs d'avoir supprimé mon premier post, j'espère que vous laisserez passer celui là !
-- Olivier Ligny Créateur web free-lance / www.cyber-tamtam.net