IE中奇怪的JavaScript解码行为

时间:2010-03-21 14:45:42

标签: javascript internet-explorer url-encoding

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

这是html片段(为简洁省略了html页眉和页脚,内容类型为“text / html; charset = utf-8”,响应标题也是如此):

<p>
  <a href="javascript:alert('abשלוםab')">link with English and Hebrew text</a>
  <a href="javascript:alert('ab%D7%A9%D7%9C%D7%95%D7%9Dab')">same text, url encoded</a>
</p>

以下是点击第二个链接时弹出的提示框:

alt text

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

更新

完整的html(最小例子)可用here 我尝试了decodeURIdecodeURIComponentunescape,但没有成功。将链接从href移至onclick可解决此问题。我的问题是,某些内容是从我无法控制的其他来源生成的,最后我在href属性中找到了javascript链接。

1 个答案:

答案 0 :(得分:4)

由于URI转义不能可靠地为您工作,我想知道您是否可能更好地使用JavaScript Unicode转义?例如。 (在JavaScript字符串中),\u1234其中1234是要显示的Unicode代码点。如果您将代码移动到JavaScript文件或其他内容,那么还可以在javascript: URI之外工作。

因此,基于您对代码点的回复,看起来像这样:

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

...在我的测试中看起来像这样:

IE7:IE7 result image http://www.imagechicken.com/uploads/1269198244050004700.png

IE8:IE8 result image http://www.imagechicken.com/uploads/1269198387032872100.png(通过RD,因此基本看)

Chrome:Chrome result image http://www.imagechicken.com/uploads/1269198434021743700.png

Firefox:Firefox result image http://www.imagechicken.com/uploads/1269198440077244000.png

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