我在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>
以下是点击第二个链接时弹出的提示框:
我知道“שלום”的字符串在utf-8中被编码为8个字节,因此有8%的NN项目,并且警报框中还有8个奇怪的字符。问题是,如何让IE识别这是utf-8编码文本,就像firefox一样?
更新
完整的html(最小例子)可用here
我尝试了decodeURI
,decodeURIComponent
和unescape
,但没有成功。将链接从href
移至onclick
可解决此问题。我的问题是,某些内容是从我无法控制的其他来源生成的,最后我在href属性中找到了javascript链接。
答案 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
(出于某种原因,似乎对最后一个代码点存在一些分歧。)