URL encode видит " & "(амперсанд) как " & " HTML-объект



я кодирую строку, которая будет передана в URL (через GET). Но если я использую escape,encodeURI или encodeURIComponent,& будет заменен на %26amp%3B, но я хочу, чтобы он был заменен на %26. Что я делаю не так?

481   3  

3 ответов:

не видя вашего кода, трудно ответить, кроме удара в темноте. Я бы предположил, что строка, которую вы передаете encodeURIComponent(), который является правильным методом для использования, исходит из результата доступа к innerHTML собственность. Решение состоит в том, чтобы получить через свойство innerText/ textContent стоимости имущества вместо:

var str, 
    el = document.getElementById("myUrl");

if ("textContent" in el)
    str = encodeURIComponent(el.textContent);
else
    str = encodeURIComponent(el.innerText);

Если это не так, вы можете использовать заменить() метод заменить объект HTML:

encodeURIComponent(str.replace(/&/g, "&"));

если вы сделали буквально это:

encodeURIComponent('&')

результат %26,вы можете проверить это здесь. Убедитесь, что строка, которую вы кодируете,просто&, а не & для начала...в противном случае это кодирование правильно, что, вероятно, имеет место. Если вам нужен другой результат по какой-то причине, вы можете сделать .replace(/&/g,'&') перед кодированием.

есть 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

надеюсь, что это сэкономит вам некоторое время

Comments

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