FAQ : foire Aux Questions
<<<
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
>>>

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 &amp; . 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.

<< Quel encodage/décodage ai-je besoin lors du passage d'une valeur via un formulaire/une URL ? >>
FAQ : foire Aux Questions PHP et HTML J'essaye d'utiliser <input type="image"> mais les variables