AJAX POST et le Signe Plus ( + ) — Comment Coder?
Je poste le contenu d'un champ de formulaire via AJAX vers un script PHP et l'utilisation de 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 sans risque "encoder" le signe plus, puis de façon appropriée "décoder" sur le PHP côté?
- pour clarifier, j'ai été en utilisant échapper(field_contents), de ne pas coder
Vous devez vous connecter pour publier un commentaire.
Utilisation
encodeURIComponent()
en JS et 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é.Exemple:
Dans votre JS:
Sur votre serveur:
Il n'est que le raw de la requête HTTP qui contient l'url des données codées.
Pour une requête GET, vous pouvez les récupérer à partir de la
URI. $_SERVER['REQUEST_URI']
ou$_SERVER['QUERY_STRING']
. Pour un urlencoded POST,file_get_contents('php://stdin')
NB:
decode()
fonctionne uniquement pour les caractères codés sur un seul octet. Il ne fonctionnera pas pour la totalité de l'UTF-8.par exemple:
Remarque:
"%C4%80"
est équivalent à:escape('\xc4\x80')
Qui est la séquence d'octets (
\xc4\x80
) qui représenteĀ
en UTF-8. Donc, si vous utilisezencodeURIComponent()
votre côté serveur doivent savoir que c'est la réception de l'UTF-8. Sinon, PHP va marquer l'encodage.<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
ou<meta charset="UTF-8">
vous pouvez aussi le mettre en PHP avec le Contenu-Type d'en-Tête HTTP.header('Content-Type: text/html;charset=UTF-8');
PS: &rsqo; ne décode pas dans le navigateur (FF3.5).En JavaScript essayer:
et en PHP:
urldecode
est aussi loin que PHP va décoder automatiquement avant le remplissage de$_POST
.La valeur hexadécimale vous êtes à la recherche pour est
%2B
Pour obtenir automatiquement dans l'exécution de PHP, votre chaîne à travers
urlencode($stringVal)
. Et puis l'exécuter rhoughurldecode($stringVal)
pour le récupérer.Si vous voulez que le JavaScript pour le manipuler, utiliserescape( str )
Modifier
Après @bobince le commentaire que je n'ai plus de lecture et il est correct.
Utilisation
encodeURIComponent(str)
etdecodeURIComponent(str)
. L'évasion ne sera pas convertir les caractères, seuls les échapper avec\
'sescape
(ouunescape
) en JavaScript; ils ne sont pas les mêmes que les URL de codage et ira mal pour + et non-ASCII des caractères Unicode. encodeURIComponent/decodeURIComponent est presque toujours ce que vous voulez.Pour la rendre plus intéressante et l'espoir de permettre à moins de s'arracher les cheveux pour quelqu'un d'autre.
À l'aide de python, construit dictionnaire pour un appareil que l'on peut utiliser curl pour configurer.
Problème:
{"timezone":"+5"} //throws an error " 5"
Solution:
{"timezone":"%2B"+"5"} //Works
Donc, en un mot:
Grâce à ce post!
Si vous avez à faire une boucle en php, vous devez utiliser
urlencode()
à partir de PHP mais individuellement!Si vous ne
urlencode(strPOST)
, vous permettra de vous apporter un autre problème, vous aurez un Item1 et & seront variation %xx valeur et être comme une valeur, voir ici-bas le retour!Exemple 1
Exemple 2
Exemple 1 est la bonne façon de préparer la chaîne de POST dans curl
Exemple 2 montrent que le récepteur ne verrez pas l'égalité et l'esperluette à distinguer à la fois de la valeur!
mon problème était avec les accents (à, É ñ ) et le signe plus (+) lorsque j'essaie d'enregistrer javascript "exemples de code" à mysql:
ma solution (pas la meilleure façon de faire, mais il fonctionne):
javascript:
fonction pour enregistrer:
fonction en php: