échapper esperluette dans l'url

J'essaie d'envoyer un message GET qui contient des chaînes avec des esperluettes et ne peut pas comprendre comment échapper à l'esperluette dans l'url.

Exemple:

http://www.example.com?candy_name=M&M
result => candy_name = M

J'ai aussi essayé:

http://www.example.com?candy_name=M&M
result => candy_name = M\

J'utilise des URL manuellement, donc j'ai juste besoin des caractères corrects.

Je ne peux utiliser aucune bibliothèque. Comment peut-il être fait?

143
demandé sur Luke Girvin 2013-05-18 13:07:57

7 réponses

Ils doivent être codés en pourcentage:

> encodeURIComponent('&')
"%26"

Donc, dans votre cas, L'URL ressemblerait à:

http://www.mysite.com?candy_name=M%26M
261
répondu Blender 2013-05-18 09:12:10

Cela ne s'applique pas uniquement à aux esperluettes dans les URL, mais à tous les caractères réservés . Certains d'entre eux comprennent:

 # $ & + ,  / : ; = ? @ [ ]

, L'idée est la même que l'encodage d'un &dans un document HTML, mais le contexte a changé à l'intérieur de l'URI, en plus d'être dans le document HTML. Ainsi, le pourcentage d'encodage empêche les problèmes d'analyse dans les deux contextes.

L'endroit où cela est très pratique est quand vous avez besoin de mettre une URL à l'intérieur d'une autre URL. Par exemple, si vous souhaitez publier un statut sur Twitter:

http://www.twitter.com/intent/tweet?status=What%27s%20up%2C%20StackOverflow%3F(http%3A%2F%2Fwww.stackoverflow.com)

Il y a beaucoup de caractères réservés dans mon Tweet, à savoir ?'():/, donc j'ai codé toute la valeur du paramètre status URL. Ceci est également utile lorsque vous utilisez des liens mailto: qui ont un corps ou un sujet de message, car vous devez encoder les paramètres body et subject pour conserver les sauts de ligne, les esperluettes, etc. intact.

Lorsqu'un caractère de l'ensemble réservé (un" caractère réservé") a signification spéciale (un "objet réservé") dans un certain contexte, et un URI régime dit qu'il est nécessaire d'utiliser le caractère pour certains autres but, alors le caractère doit être codé en pourcentage. Encodage en pourcentage un caractère réservé implique de convertir le caractère en son valeur d'octet correspondante en ASCII puis représentant cette valeur comme une paire de chiffres hexadécimaux. Les chiffres, précédés d'un signe de pourcentage ("%") qui est utilisé comme un caractère d'échappement, sont ensuite utilisés dans l'URI en lieu et place de la caractère réservé. (Pour un caractère non-ASCII, il est généralement converti en sa séquence d'octets en UTF-8, puis chaque octet la valeur est représentée comme ci-dessus.) Le caractère réservé,"/", pour par exemple, si elle est utilisée dans le composant "path" D'un URI, signification d'être un délimiteur entre les segments de chemin. Si, selon une étant donné le schéma URI, " / " doit être dans un segment de chemin, alors les trois les caractères "% 2F " ou "% 2f " doivent être utilisés dans le segment "/".

Http://en.wikipedia.org/wiki/Percent-encoding#Percent-encoding_reserved_characters

31
répondu Alex W 2016-05-24 19:58:15

Essayez d'utiliser http://www.mysite.com?candy_name=M%26M.

Voir aussi ce référence et quelques infos sur wikipédia.

6
répondu gkalpak 2013-05-18 09:12:23

Vous pouvez utiliser le caractère % pour "échapper" les caractères qui ne sont pas autorisés dans les URL. Voir RFC1738.

Un tableau de valeurs ascii est ici: http://www.asciitable.com/

Vous pouvez voir & est 26 en hexadécimal-donc ce dont vous avez besoin est M % 26M

2
répondu Peter Hull 2013-05-18 09:17:08
// this may help if someone want by php 
$variable ="candy_name=M&M";
$variable = str_replace("&","%26",$variable );
0
répondu Mohamed Ramadan 2015-08-31 08:49:29

Si vous ne pouvez utiliser aucune bibliothèque pour encoder la valeur, http://www.urlencoder.org/ ou http://www.urlencode-urldecode.com/ ou ...

Entrez simplement votre valeur "M & M", pas l'url complète; -)

0
répondu Oliver 2016-07-04 13:30:21

Vous pouvez plutôt passer vos arguments en utilisant cette fonction encodeURIComponent afin de ne pas avoir à vous soucier de passer des caractères spéciaux.

data: "param1=getAccNos&param2="+encodeURIComponent('Dolce & Gabbana') OR
var someValue = 'Dolce & Gabbana';
data : "param1=getAccNos&param2="+encodeURIComponent(someValue)

Https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent

0
répondu nikhil 2018-08-10 15:14:31