代码之家  ›  专栏  ›  技术社区  ›  Yoni

IE中奇怪的javascript解码行为

  •  1
  • Yoni  · 技术社区  · 16 年前

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

    这里是html片段(为简洁起见,省略html页眉和页脚,内容类型为“text/html;字符集=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像firefox那样识别出这是utf-8编码文本呢?

    更新:

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

    1 回复  |  直到 9 年前
        1
  •  4
  •   T.J. Crowder    16 年前

    既然URI转义对您来说不可靠,我想知道您是否应该改用JavaScript Unicode转义?例如(在JavaScript字符串中), \u1234 哪里 1234 javascript: URI,以防将代码移到JavaScript文件或其他文件中。

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

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

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

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

    IE8标准: IE8 result image http://www.imagechicken.com/uploads/1269198387032872100.png (通过RD,因此是基本外观)

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

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

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