在javascript中检索HTML元素的文字值,而不编码与号



我正在尝试检索一些HTML元素的文字内容,而不编码与号。我似乎找不到做这件事的方法。

例如:如果我设置URL:

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

在锚标记上,并尝试使用innerHTML再次检索它,或者使用XMLSerializer.serializeToString(),URL(as href)返回为:

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

(第一个未编码的安培数已被编码,编码的安培值不变[仍然编码,而不是双重编码])

我知道浏览器给我的这个编码版本是正确的(ed)HTML,通常不会引起问题,但我有人在看这些URL,他们不理解&amp;是&,以及谁将复制和粘贴URL来验证它。我也认为解码URL不安全,因为这些URL的末尾通常都有编码的URL,应该保持编码,而且它们似乎不会被双重编码。我想这也是不正确的,因为URL是正确的,而不是"编码"的。我还需要HTML标记部分(例如<a>),所以不能只获取nodeValue/innerText/textContent/data。

任何建议都收到了——我会包括一个jsfiddle,但即使是它也会编码东西,所以没有帮助!很抱歉,如果这是显而易见的,但我卡住了!

如果您在JS中使用DOM进行此操作,您可以执行以下操作:

var e = document.createElement('span');
e.innerHTML = 'url here';
return e.innerText; // This is your URL

如果您给浏览器提供了无效的HTML,它会尝试修复它。如果您随后将DOM序列化为HTML,它将为您提供固定的HTML。这是无法避免的。

OTOH,大多数x-url-form-encoded数据解析器都会遵循建议,将分号视为与符号,因此?foo=1&amp;bar=2将与foo=1&amp=&bar=2相同,因此您不必太担心复制/粘贴。这也意味着您可以首先编写foo=1;bar=2,而不必担心必须为HTML编码符号。

最新更新