Je poste le contenu d'un champ de formulaire via AJAX à un script PHP en utilisant un code Javascript (field_contents). Le problème est que tous les signes positifs 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 du côté de PHP?
Réponses
Trop de publicités?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:
// 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']; // "+"
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 l' 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:
text = "\u0100"; // Ā
// incorrect
escape(text); // %u0100
// correct
encodeURIComponent(text); // "%C4%80"
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 utilisez encodeURIComponent() de votre côté serveur doivent savoir que c'est la réception de l'UTF-8. Sinon, PHP va marquer l'encodage.
La valeur hexadécimale vous êtes à la recherche pour est - %2B
Pour l'obtenir automatiquement dans l'exécution de PHP, votre chaîne via l' urlencode($stringVal)
. Et puis l'exécuter rhough urldecode($stringVal)
pour le récupérer.
Si vous souhaitez que le JavaScript pour le manipuler, utiliser escape( str )
Modifier
Après @bobince le commentaire que je n'ai plus de lecture et il est correct.
Utiliser encodeURIComponent(str)
et decodeURIComponent(str)
. L'évasion ne sera pas convertir les caractères, seuls les échapper avec \
s'
Si vous avez à faire une boucle en php, vous devez utiliser urlencode()
de PHP mais individuellement!
strPOST = "Item1=" . $Value1 . "&Item2=" . urlencode("+")
Si vous n' urlencode(strPOST)
, vous permettra de vous apporter un autre problème, vous aurez un Item1 et et seront variation %xx valeur et être comme une valeur, voir ici-bas 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
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!