экранирование амперсанда в 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 вручную, поэтому мне просто нужны правильные символы.



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

971   7  

7 ответов:

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

> encodeURIComponent('&')
"%26"

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

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

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

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

идея такая же, как кодирование &в 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 " должны использоваться в сегмент, а не сырые "/".

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

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

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

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

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

вы можете видеть & 26 в шестнадцатеричном формате-так что вам нужно 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

Comments

    Ничего не найдено.