在javascript中检索HTML元素的字面值,而不编码&符号

时间:2012-02-20 16:20:12

标签: javascript html encoding

我正在尝试检索某些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,并且通常不会导致问题,但我有人看着这些不理解&amp; amp; amp;是&amp;,谁将复制并粘贴URL以进行验证。我也不认为解码URL是安全的,因为这些URL通常在末尾编码了网址,这些网址应保持编码状态,并且它们似乎不会被双重编码。我认为这也是错误的,因为URL已得到纠正,而不是“编码”。我还需要HTML标记部分(例如<a>),因此不能只获取nodeValue / innerText / textContent / data。

任何建议都得到了很好的收获 - 我会包含一个jsfiddle,但即使是编码的东西,所以它没有帮助!对不起,如果这很明显,但我被卡住了!

2 个答案:

答案 0 :(得分:1)

如果你在JS中使用DOM做这个,你可以这样做:

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

答案 1 :(得分:0)

如果您为浏览器提供无效的HTML,那么它会尝试修复它。如果您然后将DOM序列化为HTML,它将为您提供固定的HTML。没有办法避免这种情况。

OTOH,大多数x-url-form编码的数据解析器将遵循the recommendation to treat semi-colons as ampersands,因此?foo=1&amp;bar=2将被视为与foo=1&amp=&bar=2相同,因此您无需过多担心复制/粘贴。这也意味着您可以首先编写foo=1;bar=2,而不必担心必须为HTML编码&符号。