экранирование амперсанда в 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
вы можете использовать символ % для "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¶m2="+encodeURIComponent('Dolce & Gabbana') OR
var someValue = 'Dolce & Gabbana';
data : "param1=getAccNos¶m2="+encodeURIComponent(someValue)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent