anchor hrefs中的innerHTML和C%23(C#) - Firefox

时间:2009-03-04 22:57:50

标签: javascript firefox escaping innerhtml

If you set the innerHTML of a <div> to innerHTML = '<a href="Something/C%23">C#</a><br />';

实际上“渲染”似乎是:

<div>
<a href="Something/C#">C#</a><br />
</div> 

什么是逃避这个的正确方法,以便链接保持“Something / C%23”?

更新
我注意到这里有一个奇怪的小东西。如果使用函数来构建链接。不需要额外的%25逃逸。奇怪的。
恩。

function buildLink(tg, nm) {
  return '<a href="Something/' + tg + '">' + nm + '</a><br />';
}

4 个答案:

答案 0 :(得分:3)

值得注意的是,许多浏览器会将“Something/C%23”的链接呈现为“Something/C#”作为“友好”网址。使用Firebug或类似工具检查div,确保其实际设置不正确。

如果是这样,那么您需要将百分号转义为%25

innerHTML = '<a href="Something/C%2523">C#</a><br />';

答案 1 :(得分:2)

试试这个:

<a href="Something/C%2523">C#</a><br />

将“%”展开为“%25”即可获得所需内容。然后将“%25”转换回百分比字符,后续的23不会被重新解释。

答案 2 :(得分:0)

逃避百分比本身,你应该拥有它。

innerHTML = '<a href="Something/C%2523">C#</a><br />';

答案 3 :(得分:0)

  

实际上“渲染”似乎是:

<a href="Something/C#">C#</a><br />

不。如果您将鼠标悬停在链接上,Firefox会在状态栏中告诉您链接转到“C#”,但它正在撒谎。实际上点击链接,你最终会在“C%23”(它出现在地址栏中)。

  

什么是逃避这个的正确方法,以便链接保持“Something / C%23”?

你第一次就做对了。 “Something / C%2523”编码过多。

  

我注意到这里有一个奇怪的小东西。如果使用函数来构建链接。不需要额外的%25逃逸。

在某种功能中不会影响它。 会影响它,并且可能会让您感到困惑,如果您使用地址栏输入javascript:URL作为测试机制。 javascript:URL仍然是URL,其中的任何%-encoding将在JS解释器查看代码之前撤消一步。如果您使用JS字符串文字转义,则不会遇到此问题:

javascript:alert(document.body.innerHTML='<a href="Something/C\x2523">C#</a>')