1

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

4 回答 4

3

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

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

innerHTML = '<a href="Something/C%2523">C#</a><br />';
于 2009-03-04T23:07:22.663 回答
2

试试这个:

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

%将“ ”扩展为“ %25”,您将得到您想要的。然后 " %25" 被转换回百分号字符并且后续23不会重新解释。

于 2009-03-04T23:05:40.610 回答
0

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

innerHTML = '<a href="Something/C%2523">C#</a><br />';
于 2009-03-04T23:05:59.890 回答
0

似乎实际上得到“渲染”的是:

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

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

逃避这种情况的正确方法是什么,所以链接将保持 "Something/C%23" ?

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

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

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

javascript:alert(document.body.innerHTML='<a href="Something/C\x2523">C#</a>')
于 2009-03-05T01:06:43.470 回答