Je POSTE le contenu d'un champ de formulaire via AJAX dans un script PHP et j'utilise 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» le signe plus en toute sécurité, puis le «décoder» de manière appropriée côté PHP?
98
Réponses:
Utilisez
encodeURIComponent()
en JS et en 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:
Sur votre serveur:
Seule la requête HTTP brute contient les données encodées en URL.
Pour une requête GET, vous pouvez la récupérer à partir du fichier
URI. $_SERVER['REQUEST_URI']
ou$_SERVER['QUERY_STRING']
. Pour un POST codé par URL,file_get_contents('php://stdin')
NB:
decode()
ne fonctionne que pour les caractères codés sur un octet. Cela ne fonctionnera pas pour toute la gamme UTF-8.par exemple:
Remarque:
"%C4%80"
équivaut à:escape('\xc4\x80')
Quelle est la séquence d'octets (
\xc4\x80
) qui représenteĀ
en UTF-8. Donc, si vous utilisezencodeURIComponent()
votre côté serveur, vous devez savoir qu'il reçoit UTF-8. Sinon, PHP modifiera l'encodage.la source
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
ou<meta charset="UTF-8">
vous pouvez également le définir en PHP avec l'en-tête HTTP Content-Type.header('Content-Type: text/html;charset=UTF-8');
PS: & rsqo; ne décode pas dans le navigateur (FF3.5).En JavaScript, essayez:
et en PHP:
la source
urldecode
est également très éloigné car PHP le décodera automatiquement avant de le remplir$_POST
.La valeur hexadécimale que vous recherchez est
%2B
Pour l'obtenir automatiquement en PHP, exécutez votre chaîne
urlencode($stringVal)
. Et puis exécutez-leurldecode($stringVal)
pour le récupérer.Si vous souhaitez que JavaScript le gère, utilisezescape( str )
Éditer
Après le commentaire de @ bobince, j'ai fait plus de lecture et il a raison. Utilisez
encodeURIComponent(str)
etdecodeURIComponent(str)
. Escape ne convertira pas les personnages, ne les échappera qu'avec\
'sla source
escape
(ouunescape
) en JavaScript; ils ne sont pas les mêmes que le codage d'URL et iront mal pour + et tous les caractères Unicode non ASCII. encodeURIComponent / decodeURIComponent est presque toujours ce que vous voulez.Pour le rendre plus intéressant et, espérons-le, permettre moins de tirer les cheveux pour quelqu'un d'autre. Utilisation de python, dictionnaire construit pour un appareil que nous pouvons utiliser curl pour configurer.
Problème:
{"timezone":"+5"} //throws an error " 5"
Solution:
{"timezone":"%2B"+"5"} //Works
Donc, en un mot:
Merci à ce post!
la source
Si vous devez faire un curl en php, vous devriez utiliser
urlencode()
depuis PHP mais individuellement!Si vous le faites
urlencode(strPOST)
, vous vous poserez un autre problème, vous aurez un Item1 et & changera la valeur% xx et sera comme une valeur, voir ici le retour!Exemple 1
Exemple 2
L'exemple 1 est le bon moyen de préparer une chaîne pour POST dans curl
L'exemple 2 montre que le récepteur ne verra pas l'égal et l'esperluette pour distinguer les deux valeurs!
la source
mon problème était avec les accents (á É ñ) et le signe plus (+) lorsque j'essayais de sauvegarder des "exemples de code" javascript sur mysql:
ma solution (pas la meilleure façon, mais ça marche):
javascript:
fonction pour enregistrer:
fonction en php:
la source