anchor hrefs中的innerHTML和C%23(C#) - Firefox
-
03-07-2019 - |
题
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 />';
}
解决方案
试试这个:
<a href="Something/C%2523">C#</a><br />
展开<!>“; %
<!>”; to <!> quot; %25
<!> quot;你得到了你想要的东西。然后<!>“; 23
<!>”;转换回百分比字符,后续的<=>不会被重新解释。
其他提示
值得注意的是,许多浏览器会呈现指向<!>“; Something/C%23
<!>”的链接; as <!> quot; Something/C#
<!> quot;作为<!>“友好的<!>”; URL。使用Firebug或类似工具检查div
以确保它实际设置不正确。
如果是这样,那么你需要将百分号转义为%25
:
innerHTML = '<a href="Something/C%2523">C#</a><br />';
逃避百分比本身,你应该拥有它。
innerHTML = '<a href="Something/C%2523">C#</a><br />';
实际上“渲染”似乎是:
<a href="Something/C#">C#</a><br />
不。如果您将鼠标悬停在链接上,Firefox会在状态栏中告诉您链接转到<!>“C#<!>”;但它正在撒谎。实际上点击链接,你最终会在<!>“C%23 <!>”; (它会出现在地址栏中。)
什么是逃避这个的正确方法,以便链接保持<!>“Something / C%23 <!>”; ?
你第一次就做对了。 <!> QUOT;东西/ C%2523 QUOT <!>;编码过多。
我注意到这里有一个奇怪的小东西。如果使用函数来构建链接。不需要额外的%25逃逸。
在某种功能中不会影响它。 会影响它,并且可能会让您感到困惑,如果您使用地址栏输入javascript:URL作为测试机制。 javascript:URL仍然是URL,其中的任何%-encoding将在JS解释器查看代码之前撤消一步。如果您使用JS字符串文字转义,则不会遇到此问题:
javascript:alert(document.body.innerHTML='<a href="Something/C\x2523">C#</a>')