11.8 PHP et HTML
11 FAQ : foire Aux Questions
Manuel PHP
->
Quel encodage/décodage ai-je besoin lors du passage d'une valeur via
un formulaire/une URL ?
.
J'essaye d'utiliser <input type="image"> mais
les variables . Comment créer un tableau dans une balise <form> HTML ? .
Comment puis-je récupérer le résultat d'un champs HTML .
Comment puis-je passer une variable de Javascript vers PHP ?
|
11.8.1
Quel encodage/décodage ai-je besoin lors du passage d'une valeur via
un formulaire/une URL ?
Il y a plusieurs étapes pour lesquelles le codage est important. En supposant que vous avez
une chaîne de caractères
$data
, qui contient la chaîne
que vous voulez passer de manière non-encodée, voici les étapes appropriées :
-
Interprétation HTML. Afin d'indiquer une chaîne aléatoire, vous
devez
l'inclure entre doubles guillemets et
utiliser la fonction
htmlspecialchars
pour encoder
la chaîne.
-
URL : une URL est constituée de plusieurs parties. Si vous voulez que vos données
soient interprétées comme un seul élément, vous
devez
les encoder avec la fonction
urlencode
.
Un élément de formulaire HTML caché |
<?php echo '<input type="hidden" value="' . htmlspecialchars($data) . '" />'; ?>
|
Note |
Il n'est pas correct d'utilliser la fonction
urlencode
pour vos données
$data
, car il en est de la responsabilité du
navigateur de les encoder. Tous les navigateurs populaires le font correctement.
Notez que cela s'effectue sans considération de la méthode utilisée (i.e
GET
ou
POST
).
Vous devez uniquement noter ce cas pour les requêtes
GET
,
car les requêtes
POST
sont généralement cachées.
|
Données éditables par l'utilisateur |
<?php echo "<textarea name=\"mydata\">\n"; echo htmlspecialchars($data)."\n"; echo '</textarea>'; ?>
|
Note |
Les données sont montrées dans le navigateur comme prévues, car celui-ci interprétera
les symboles HTML échappés.
Au moment de la validation, via la méthode
GET
ou
POST
, les données devraient être
url-encodées par le navigateur avant le transfert et directement url-décodées par PHP.
Donc, finalement, vous n'avez pas à effectuer d'url-encodage/url-decodage vous-même,
tout est effectué automatiquement.
|
Dans une URL |
<?php echo "<a href=\"" . htmlspecialchars("/nextpage.php?stage=23&data=" . urlencode($data)) . "\">\n"; ?>
|
Note |
En fait, vous simulez une requête
GET
HTML, il est nécessaire
d'utiliser manuellement la fonction
urlencode
sur vos données.
|
Note |
Vous devez utiliser
htmlspecialchars
sur l'URL complète,
car l'URL se comporte comme la valeur d'un attribut HTML. Dans ce cas, le navigateur
fera un
htmlspecialchars
sur la valeur et passera le résultat à
l'URL. PHP devrait comprendre l'URL correctement, car vous avez url-encodé les données.
Vous devez noter que
&
dans l'URL est remplacé par
&
. Bien que la plus part des navigateurs devraient
corriger cela si vous l'oubliez, ce n'est pas toujours le cas. Donc, même si votre URL
n'est pas dynamique, vous
devez
utiliser
la fonction
htmlspecialchars
sur l'URL.
|
|