IE中奇怪的javascript解码行为

IE中奇怪的javascript解码行为,javascript,internet-explorer,url-encoding,Javascript,Internet Explorer,Url Encoding,我在IE8和IE7中使用非英语字符运行以下html代码段(我们尝试了希伯来文和中文),第二个链接永远无法正常工作。 警报框中显示的文本已损坏。 这发生在IE8和IE7中,但在firefox中没有。它不依赖于Windows的区域设置 以下是html代码段(为简洁起见,省略了html页眉和页脚,内容类型为“text/html;charset=utf-8”,响应页眉也是如此): 以下是单击第二个链接时弹出的警报框: 我知道“שלום”的字符串在utf-8中编码为8字节,因此有8%的NN项,警报

我在IE8和IE7中使用非英语字符运行以下html代码段(我们尝试了希伯来文和中文),第二个链接永远无法正常工作。
警报框中显示的文本已损坏。 这发生在IE8和IE7中,但在firefox中没有。它不依赖于Windows的区域设置

以下是html代码段(为简洁起见,省略了html页眉和页脚,内容类型为“text/html;charset=utf-8”,响应页眉也是如此):


以下是单击第二个链接时弹出的警报框:

我知道“שלום”的字符串在utf-8中编码为8字节,因此有8%的NN项,警报框中也有8个奇怪的字符。问题是,我如何让IE像firefox那样识别这是utf-8编码文本

更新:

完整的html(最小示例)可用。

我尝试了
decodeURI
decodeURIComponent
unescape
,但没有成功。将链接从
href
移动到
onclick
解决了这个问题。我的问题是,有些内容是从我无法控制的其他来源生成的,结果我在href属性中使用了javascript链接。

由于URI转义无法可靠地为您工作,我想知道您是否最好改用javascript Unicode转义?例如,(在JavaScript字符串中),
\u1234
其中
1234
是要显示的Unicode代码点。这还具有在
javascript:
URI之外工作的优点,以防将代码移动到javascript文件或其他地方

因此,根据您对代码点的回复,应该是这样的:

<a href="javascript:alert('ab\u05E9\u05DC\u05D5\u05DDab')">same text, using JavaScript escapes</a>

…在我的测试中是这样的:

IE7:

IE8:(通过RD,因此是基本外观)

铬:

火狐:


(出于某种原因,对于最后一个代码点似乎存在一些分歧。)

由于URI转义对您的工作不可靠,我想知道您是否应该改用JavaScript Unicode转义?例如,(在JavaScript字符串中),
\u1234
其中
1234
是要显示的Unicode代码点。这还具有在
javascript:
URI之外工作的优点,以防将代码移动到javascript文件或其他地方

因此,根据您对代码点的回复,应该是这样的:

<a href="javascript:alert('ab\u05E9\u05DC\u05D5\u05DDab')">same text, using JavaScript escapes</a>

…在我的测试中是这样的:

IE7:

IE8:(通过RD,因此是基本外观)

铬:

火狐:


(出于某种原因,最后一个代码点似乎存在一些分歧。)

您真的收到了该文本吗?文本应该是
ab%D7%A9%D7%9C%D7%95%D7%9Dab
@Gumbo:因为它在URI中(
javascript:
),所以应该处理URI转义。例如,对于
%20
,他会得到一个空格。如果它不在URI中,那么你是对的,它应该是不变的。@t.J.克劳德:啊,当然!我完全忘了。可能是因为你不应该在
href
中使用JavaScript…@Gumbo:噢,有一些用法。。。但是是的,有限的用例集,绝对是。:-)@我的Unicode fu很弱,其中一个字符的码点数是多少?您可能认为我可以从您的URI转义版本中找到它,但是,很显然,不是这样的。:-)你真的收到那条短信了?文本应该是
ab%D7%A9%D7%9C%D7%95%D7%9Dab
@Gumbo:因为它在URI中(
javascript:
),所以应该处理URI转义。例如,对于
%20
,他会得到一个空格。如果它不在URI中,那么你是对的,它应该是不变的。@t.J.克劳德:啊,当然!我完全忘了。可能是因为你不应该在
href
中使用JavaScript…@Gumbo:噢,有一些用法。。。但是是的,有限的用例集,绝对是。:-)@我的Unicode fu很弱,其中一个字符的码点数是多少?您可能认为我可以从您的URI转义版本中找到它,但是,很显然,不是这样的。:-)