Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

htmlspecialchars sans effet sur des donnees envoyees en POST

1 réponse
Avatar
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:

<form class="noprint" action="./ajouter.php" method="post">
<input class=ajouter type=submit value="Modifier cette activité">
<input type=hidden name="action" value="2">
<input type=hidden name="id_activite" value="63">
<input type=hidden name="titre" value="Formation &quot;taille des
arbres&quot;">
(etc.)

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.

J'ai simplement dans le code de 'ajouter.php' :

$titre=stripslashes($_POST['titre']);
$description=stripslashes($_POST['description']);
echo "<!-- $titre -->\n"; // pour débugguer
echo "<!-- $description -->\n";

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.

Merci d'avance,

G.

1 réponse

Avatar
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
&quot;taille des arbres&quot;>, mais <Formation "taille des arbres">,
car il convertit les trucs encodés (&quot;, &eacute;, 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 &quot, et une deuxième fois pour que le &quot; soit converti
en &amp;quot; et puisse ensuite être réinterprété par le navigateur et
envoyé en tant que &quot;.

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