2010-08-22 1 views
283

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

+0

Где приходит строка из? Можете ли вы опубликовать код, который у вас есть? –

+1

'&' - это правильный способ избежать амперсанда в контексте HTML ... откуда исходит ваш источник? и какой пункт назначения? Например, может быть лучше сделать эту серверную сторону. –

+0

Я рисую что-то из тела HTML (и это кодируется HTML (так, есть & Я понимаю сейчас)), и я должен передать его в URL-адрес ... Итак, мне нужно декодировать html (но как?) en затем кодирует строку (с encodeURIComponent) ... – dododedodonl

ответ

422

Не видя своего кода, трудно ответить, кроме удара в темноте. Я бы предположил, что строка, которую вы передаете в 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, "&")); 
91

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

encodeURIComponent('&') 

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

+3

... это, вероятно, его проблема. –

2

Имеются кодировки HTML и URI. & является &encoded in HTML в то время как %26 является & в URI encoding.

Так что перед URI, кодирующим вашу строку, которую вы можете захотеть HTML декодировать и затем URI кодировать :)

var div = document.createElement('div'); 
div.innerHTML = '&AndOtherHTMLEncodedStuff'; 
var htmlDecoded = div.firstChild.nodeValue; 
var urlEncoded = encodeURIComponent(htmlDecoded); 

результат %26AndOtherHTMLEncodedStuff

Надежда это экономит ваше время

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

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