Je poste le contenu d'un champ de formulaire via AJAX à un script PHP et en utilisant JavaScript pour escape(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é, puis le "décoder" de manière appropriée du côté PHP?)?
Utilisez encodeURIComponent()
dans JS et dans PHP vous devriez recevoir les valeurs correctes.
Remarque: lorsque vous accédez à $_GET
, $_POST
Ou $_REQUEST
En PHP, vous récupérez des valeurs qui ont déjà été décodées.
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 brute contient les données encodées dans l'URL.
Pour une demande GET, vous pouvez récupérer cela à partir de URI. $_SERVER['REQUEST_URI']
Ou $_SERVER['QUERY_STRING']
. Pour un POST codé en url, file_get_contents('php://stdin')
NB:
decode()
ne fonctionne qu'avec les caractères codés sur un octet. Cela ne fonctionnera pas pour toute la gamme UTF-8.
par exemple:
text = "\u0100"; // Ā
// incorrect
escape(text); // %u0100
// correct
encodeURIComponent(text); // "%C4%80"
Remarque: "%C4%80"
Équivaut à: escape('\xc4\x80')
Quelle est la séquence d'octets (\xc4\x80
) Qui représente Ā
Dans UTF-8. Donc, si vous utilisez encodeURIComponent()
, votre serveur doit savoir qu'il reçoit le format UTF-8. Sinon PHP modifiera l'encodage.
En JavaScript, essayez:
encodeURIComponent()
et en PHP:
urldecode($_POST['field']);
Pour rendre cela plus intéressant et permettre, espérons-le, moins de tirer les cheveux pour quelqu'un d'autre. Utilisation de python, dictionnaire construit pour un périphérique que nous pouvons utiliser curl pour configurer.
Problème: {"timezone":"+5"} //throws an error " 5"
Solution: {"timezone":"%2B"+"5"} //Works
Donc, en quelques mots:
var = {"timezone":"%2B"+"5"}
json = JSONEncoder().encode(var)
subprocess.call(["curl",ipaddress,"-XPUT","-d","data="+json])
Merci à ce post!
La valeur hexadécimale que vous recherchez est %2B
Pour l'obtenir automatiquement dans PHP, exécutez votre chaîne via urlencode($stringVal)
. _), Puis exécutez-la bien urldecode($stringVal)
pour la récupérer.
Si vous voulez que le JavaScript le gère, utilisez escape( str )
Éditer
Après le commentaire de @ bobince, j'ai lu davantage et il a raison. Utilisez encodeURIComponent(str)
et decodeURIComponent(str)
. Echap ne convertira pas les caractères, seulement les échappera avec \
Si vous devez faire un curl en php, vous devez utiliser urlencode()
de PHP mais individuellement!
strPOST = "Item1=" . $Value1 . "&Item2=" . urlencode("+")
Si vous faites urlencode(strPOST)
, vous apporterez un autre problème, vous aurez un élément1 et & changera la valeur% xx et sera comme une valeur, voir ici le retour!
Exemple 1
$strPOST = "Item1=" . $Value1 . "&Item2=" . urlencode("+") will give Item1=Value1&Item2=%2B
Exemple 2
$strPOST = urlencode("Item1=" . $Value1 . "&Item2=+") will give Item1%3DValue1%26Item2%3D%2B
L’exemple 1 est le bon moyen de préparer une chaîne pour POST in curl
L'exemple 2 montre que le récepteur ne verra pas l'égalité et l'esperluette pour distinguer les deux valeurs!