escapar de ampersand en url


Estoy tratando de enviar un mensaje GET que contiene cadenas con ampersands y no puedo imaginar cómo escapar del ampersand en la url.

Ejemplo:

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

También intenté:

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

Estoy usando url manualmente, así que solo necesito los caracteres correctos.

No puedo usar ninguna biblioteca. ¿Cómo se puede hacer?

Author: Luke Girvin, 2013-05-18

7 answers

Necesitan ser codificados por ciento:

> encodeURIComponent('&')
"%26"

Así que en tu caso, la URL se vería como:

http://www.mysite.com?candy_name=M%26M
 261
Author: Blender,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-18 09:12:10

Esto no solo se aplica a los ampersand en las URLs, sino a todos los caracteres reservados. Algunos de los cuales incluyen:

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

La idea es la misma que codificar un &en un documento HTML, pero el contexto ha cambiado para estar dentro del URI, además de estar dentro del documento HTML. Por lo tanto, la codificación porcentual evita problemas con el análisis dentro de ambos contextos.

El lugar donde esto es muy útil es cuando necesitas poner una URL dentro de otra URL. Por ejemplo, si desea publicar un estado en Twitter:

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

Hay muchos caracteres reservados en mi Tweet, a saber ?'():/, así que codifiqué todo el valor del parámetro URL status. Esto también es útil cuando se utilizan enlaces mailto: que tienen un cuerpo de mensaje o asunto, porque necesita codificar los parámetros body y subject para mantener saltos de línea, ampersands, etc. intacto.

Cuando un carácter del conjunto reservado (un" carácter reservado") tiene significado especial (a "propósito reservado") en un determinado contexto, y un URI scheme dice que es necesario usar ese carácter para algún otro propósito, entonces el carácter debe estar codificado en porcentaje. Porcentaje-codificación un carácter reservado implica convertir el carácter a su valor de byte correspondiente en ASCII y luego representa ese valor como un par de dígitos hexadecimales. Los dígitos, precedidos por un signo de porcentaje ("%") que se utiliza como un carácter de escape, se utilizan en el URI en lugar de la carácter reservado. (Para un carácter no ASCII, es típicamente convertido a su secuencia de bytes en UTF-8, y luego cada byte el valor se representa como arriba.) El carácter reservado "/", para ejemplo, si se usa en el componente "path" de un URI, tiene el significado de ser un delimitador entre segmentos de ruta. If, according to a dado el esquema URI, " / " debe estar en un segmento de ruta, entonces los tres los caracteres "%2F "o" %2f " deben usarse en el segmento en lugar de un raw "/".

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

 31
Author: Alex W,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-24 19:58:15

Intenta usar http://www.mysite.com?candy_name=M%26M.

Véase también este referencia y algo más de información sobre wikipedia.

 6
Author: gkalpak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-18 09:12:23

Puede usar el carácter % para 'escapar' caracteres que no están permitidos en las URL. Véase RFC1738 .

Una tabla de valores ascii está aquí: http://www.asciitable.com/

Puede ver y es 26 en hexadecimal, por lo que lo que necesita es M%26M

 2
Author: Peter Hull,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
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
Author: Mohamed Ramadan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-31 08:49:29

Si no puede usar ninguna biblioteca para codificar el Valor, http://www.urlencoder.org/ o http://www.urlencode-urldecode.com/ o ...

Simplemente ingrese su valor "M & M", no la url completa; -)

 0
Author: Oliver,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-04 13:30:21

Puede pasar sus argumentos usando esta función encodeURIComponent para que no tenga que preocuparse por pasar caracteres especiales.

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
Author: nikhil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-10 15:14:31