Después de consultar con expertos en la materia, programadores de diversas áreas y profesores hemos dado con la respuesta al dilema y la dejamos plasmada en este post.
Solución:
Deben estar codificados en porcentaje:
> encodeURIComponent('&')
"%26"
Entonces, en su caso, la URL se vería así:
http://www.mysite.com?candy_name=M%26M
Esto no lo hace solo aplicar al ampersand en las URL, 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 resulta muy útil es cuando necesita colocar 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 de la status
parámetro de URL. Esto también es útil cuando se utiliza mailto:
enlaces que tienen un cuerpo de mensaje o asunto, porque necesita codificar el body
y subject
parámetros para mantener intactos los saltos de línea, los símbolos de unión, etc.
Cuando un carácter del conjunto reservado (un “carácter reservado”) tiene un significado especial (un “propósito reservado”) en un contexto determinado, y un esquema URI dice que es necesario usar ese carácter para algún otro propósito, entonces el carácter debe estar codificado en porcentaje. La codificación porcentual de un carácter reservado implica convertir el carácter a su valor de byte correspondiente en ASCII y luego representar ese valor como un par de dígitos hexadecimales. Los dígitos, precedidos por un signo de porcentaje (“%”) que se usa como carácter de escape, se usan en el URI en lugar del carácter reservado. (Para un carácter que no es ASCII, generalmente se convierte a su secuencia de bytes en UTF-8, y luego cada valor de byte se representa como se indica arriba). El carácter reservado “/”, por ejemplo, si se usa en el componente “ruta” de un URI, tiene el significado especial de ser un delimitador entre segmentos de ruta. Si, de acuerdo con un esquema de URI dado, “/” debe estar en un segmento de ruta, entonces los tres caracteres “%2F” o “%2f” deben usarse en el segmento en lugar de un “/” sin procesar.
http://en.wikipedia.org/wiki/Percent-encoding#Percent-encoding_reserved_characters
Intenta usar http://www.example.org?candy_name=M%26M
.
Consulte también esta referencia y más información en Wikipedia.