экранирование амперсанда в url

Я пытаюсь отправить сообщение GET, которое содержит строки с амперсандами и не может понять, как избежать амперсанда в url.

пример:

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

Я тоже пробовал:

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

Я использую URL-адреса вручную, поэтому мне просто нужны правильные символы.

Я не могу использовать любые библиотеки. Как это можно сделать?

7 ответов


Они должны быть закодированы в процентах:

> encodeURIComponent('&')
"%26"

поэтому в вашем случае URL-адрес будет выглядеть так:

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

это не только применить к амперсанду в URLs, но ко всем зарезервированные символы. Некоторые из которых включают:

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

идея такая же, как кодирование &в HTML-документе, но контекст изменился, чтобы быть в URI, в дополнение к тому, чтобы быть в HTML-документе. Таким образом, процентная кодировка предотвращает проблемы с разбором внутри обоих контекстов.

место, где это пригодится много, когда вам нужно чтобы поместить URL-адрес внутри другого URL-адреса. Например, если вы хотите опубликовать статус в Twitter:

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

в моем твите много зарезервированных символов, а именно ?'():/, поэтому я закодировал все значение status параметр URL. Это также полезно при использовании mailto: ссылки, которые имеют тело сообщения или тему, потому что вам нужно кодировать body и subject параметры для сохранения разрывов линий, амперсандов и т. д. нетронутый.

когда символ из зарезервировано набор ("скрытность") был специальное значение ("зарезервированная цель") в определенном контексте и URI схема говорит, что нужно использовать этот символ для какой-то другой цель, тогда символ должен быть закодирован в процентах. Процент-кодирование зарезервированный символ включает в себя преобразование символа в его соответствующее значение байта в ASCII, а затем представляющее это значение как пара шестнадцатеричных цифр. Цифр, которым предшествует знак процента ("%"), который используется в качестве escape-символ, затем используются в URI на место зарезервированного персонажа. (Для символа, отличного от ASCII, это обычно преобразуется в свою байтовую последовательность в UTF-8, а затем каждый байт стоимость представлен выше.) Зарезервированный символ "/", для пример, если используется в компоненте" path " URI, имеет специальный значение быть разделителем между сегментами пути. Если, согласно учитывая схему URI, " / " должен быть в сегменте пути, то три символы "%2F "или" %2f " должны использовать в сегменте вместо raw "/".

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


попробуйте использовать http://www.mysite.com?candy_name=M%26M.

см. также ссылка и еще немного инфо о Википедия.


вы можете использовать символ % для "escape" символов, которые не разрешены в URL-адресах. См.RFC1738.

таблица значений ascii находится здесь:http://www.asciitable.com/

вы можете увидеть и 26 в hex-так что вам нужно M%26M


// this may help if someone want by php 
$variable ="candy_name=M&M";
$variable = str_replace("&","%26",$variable );

Если вы не можете использовать библиотеки для кодирования значения, http://www.urlencoder.org/ или http://www.urlencode-urldecode.com/ или ...

просто введите значение "M&M", а не полный url; -)


вы можете передать свои аргументы, используя эту функцию encodeURIComponent, поэтому вам не нужно беспокоиться о передаче каких-либо специальных символов.

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