2013-05-18 1 views
119

Я пытаюсь отправить сообщение GET, которое содержит строки с амперсандами, и не может понять, как избежать амперсанда в URL-адресе.escaping ampersand в 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\\ 

Я использую URLs вручную, так что я просто нужно правильные символы.

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

ответ

219

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

> encodeURIComponent('&') 
"%26" 

Так что в вашем случае URL будет выглядеть следующим образом:

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

: -% 26 не работает для меня. Есть ли другое решение? – Sanjiv

+0

@Sanjiv: что вы подразумеваете под словом «не работает»? – Blender

+1

Когда я заменяю & на% 26, он все еще показывает ту же ошибку - 'потенциально опасное значение Request.Path было обнаружено у клиента (&).' – Sanjiv

5

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

Смотрите также этот reference и некоторую информацию о wikipedia.

2

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

Таблица значений ASCii здесь: http://www.asciitable.com/

Вы можете увидеть & 26 в шестнадцатеричной - так что вам нужно, M% 26M

27

Это не применять только к амперсанд в URL-адресов , но всем reserved characters. Некоторые из них включают в себя:

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

Идея такая же, как и кодирующая & в 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, а затем каждый байт имеет значение, как указано выше.) Зарезервированный символ «/» для примера , если он используется в " путь "URI, имеет значение , являющееся разделителем между сегментами пути. Если в соответствии с приведенной схемой URI «/» должно быть в сегменте пути, тогда в сегменте должны использоваться три знака «% 2F» или «% 2f» из трех символов 0% «/».

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

+2

Среди вышеперечисленного списка '! '() * 'не кодируются URL-адресом, используя' encodeURIComponent'. –

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

 Смежные вопросы

  • Нет связанных вопросов^_^