Получить буквальное значение элементов HTML в javascript, без кодирования амперсандов - PullRequest
1 голос
/ 20 февраля 2012

Я пытаюсь получить буквальное содержимое некоторых элементов HTML, без кодирования амперсандов .Кажется, я не могу найти способ сделать это.

Пример: если я задаю URL:

http://www.google.com?q=foo&bla=bar&kitties=yay 

для тега привязки и попытаюсь получить его снова с помощью innerHTMLили с помощью XMLSerializer.serializeToString () URL-адрес (как href) возвращается как:

http://www.google.com?q=foo&bla=bar&kitties=yay

(первый некодированный амперсанд был закодирован, а закодированный амперсанд неизменен [все еще закодирован, недвойное кодирование])

Я знаю, что эта закодированная версия, которую браузер возвращает мне, является правильным (ed) HTML и обычно не вызывает проблем, но у меня есть люди, которые просматривают эти URL и не понимают этого.& is &, и кто будет копировать и вставлять URL, чтобы проверить это.Я также не думаю, что безопасно декодировать URL-адрес, так как часто эти URL-адреса имеют закодированные URL-адреса в конце, которые должны оставаться закодированными, и, похоже, они не кодируются дважды.Я полагаю, это также неверно, так как URL исправлен и не «закодирован» как таковой.Мне также нужна часть HTML-тега (например, <a>), поэтому я не могу просто получить nodeValue / innerText / textContent / data.

Любые предложения, которые были получены, - я бы добавил jsfiddle, но даже этокодирует вещи, так что это не полезно!Извините, если это очевидно, но я застрял!

Ответы [ 2 ]

1 голос
/ 20 февраля 2012

Если вы делаете это с DOM в JS, вы можете сделать что-то вроде этого:

var e = document.createElement('span');
e.innerHTML = 'url here';
return e.innerText; // This is your URL
0 голосов
/ 20 февраля 2012

Если вы укажете браузеру неверный HTML, он попытается исправить его. Если вы затем сериализуете DOM в HTML, он даст вам фиксированный HTML. Этого нельзя избежать.

OTOH, большинство анализаторов данных, закодированных в форме x-url, будут следовать рекомендации по обработке точек с запятой как амперсандов , поэтому ?foo=1&amp;bar=2 будет обрабатываться так же, как foo=1&amp=&bar=2, поэтому вы не будете нужно слишком беспокоиться о копировании / вставке. Это также означает, что вы могли бы просто написать foo=1;bar=2 и не беспокоиться о необходимости кодировать амперсанды для HTML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...