Я кодирую строку, которая будет передана в URL (через GET). Но если я использую escape
, encodeURI
или encodeURIComponent
, &
будет заменен на %26amp%3B
, но я хочу, чтобы его заменили на %26
. Что я делаю неправильно?
URL encode видит "&" (амперсанд) как "&" Объект HTML
Ответ 1
Не видя своего кода, трудно ответить, кроме удара в темноте. Я бы предположил, что строка, которую вы передаете encodeURIComponent(), которая является правильным методом для использования, исходит из результата доступа к свойству innerHTML. Решение состоит в том, чтобы получить значение свойства innerText/textContent:
var str,
el = document.getElementById("myUrl");
if ("textContent" in el)
str = encodeURIComponent(el.textContent);
else
str = encodeURIComponent(el.innerText);
Если это не так, вы можете использовать метод replace() для замены объекта HTML:
encodeURIComponent(str.replace(/&/g, "&"));
Ответ 2
Если вы сделали это буквально:
encodeURIComponent('&')
Тогда результат %26
, вы можете проверить здесь. Убедитесь, что строка, которую вы кодируете, всего лишь &
, а не &
, чтобы начать с... в противном случае это кодирование правильно, что, вероятно, так. Если по какой-то причине вам нужен другой результат, вы можете сделать .replace(/&/g,'&')
перед кодировкой.
Ответ 3
Существуют кодировки HTML и URI. &
&
закодирован в HTML, а %26
- &
в кодировка URI.
Итак, перед кодировкой URI вашей строки вы можете захотеть декодировать HTML, а затем кодировать URI:)
var div = document.createElement('div');
div.innerHTML = '&AndOtherHTMLEncodedStuff';
var htmlDecoded = div.firstChild.nodeValue;
var urlEncoded = encodeURIComponent(htmlDecoded);
результат %26AndOtherHTMLEncodedStuff
Надеюсь, это сэкономит вам время.