Maison > Questions et réponses > le corps du texte
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
?P粉0109671362023-07-22 00:53:41
Essayez-le en JavaScript :
encodeURIComponent()
PHP :
urldecode($_POST['field']);
P粉6749994202023-07-22 00:39:11
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 gâchera l'encodage.