Je publie le contenu d'un champ de formulaire dans un script PHP via AJAX et j'utilise JavaScript pour m'échapper (field_contents). Le problème est que tous les signes plus sont supprimés et remplacés par des espaces. Comment puis-je ? encoder ? en toute sécurité le signe plus, puis le ? décoder ? de manière appropriée en PHP
?Essayez-le en JavaScript?:
encodeURIComponent()
PHP?:
urldecode($_POST['field']);
Utilisez encodeuriccomponent() en JS et PHP et vous devriez recevoir la valeur correcte.
REMARQUE : Lorsque vous accédez à $_GET, $_POST ou $_REQUEST en PHP, vous récupérez une valeur déjà décodée.
Exemple?:
Dans votre JS?:
// url encode your string var string = encodeURIComponent('+'); // "%2B" // send it to your server window.location = 'http://example.com/?string='+string; // http://example.com/?string=%2B
Sur votre serveur
echo $_GET['string']; // "+"
Seule la requête HTTP d'origine contient des données codées en URL.
Pour les requêtes GET, vous pouvez le récupérer à partir de l'URI. $_SERVER['REQUEST_URI'] ou $_SERVER['QUERY_STRING']. Pour le POST codé en urlen, file_get_contents('php://stdin')
Remarque?:
Decode() s'applique uniquement aux caractères codés sur un seul octet. Cela ne fonctionne pas pour toute la gamme UTF-8.
par exemple?:
text = "\u0100"; // ā // incorrect escape(text); // %u0100 // correct encodeURIComponent(text); // "%C4%80"
Remarque?: "%C4%80"
is equivalent to: escape('xc4x80')
Il s'agit de la séquence d'octets représentant ? en UTF-8 (xc4x80). Donc, si vous utilisez encodeuriccomponent(), votre c?té serveur doit savoir qu'il re?oit UTF-8. Sinon, PHP gachera l'encodage.