使用javascript在blogger中出现奇怪的utf8 char行为

时间:2013-11-21 19:38:41

标签: javascript utf-8 blogger

我在博客中使用javascript,但是我使用字符“¡”和“?”有一种奇怪的行为。 例如,以下代码将在div中显示 ñéúüëò¡!¿? ,但 ñéúüëò¡!¿? 作为提醒消息。

<div id="test">
    </div>
    <script>
    (function () {
      document.getElementById("test").innerHTML = 'ñéúüëò¡!¿?';
      alert('ñéúüëò¡!¿?');
    })();
    </script>
</pre>

如果我们查看生成的代码,我们可以看到javascript标记已转换为:

<script>
(function () {
document.getElementById("test").innerHTML = 'ñéúüëò&#161;!&#191;?';
alert('ñéúüëò&#161;!&#191;?');
})();
</script>

但是,我可以使用外部js

<div id="test">
</div>
<script src="http://foo.bar/file.js"></script>

作为js文件(utf8编码):

document.getElementById("test").innerHTML = 'ñéúüëò¡!¿?';
alert('ñéúüëò¡!¿?');

结果是预期的结果:div中的ñéúüëò¡!¿?ñéúüëò¡?¿?作为警报信息。

更奇怪的是,我可以在博客中编写以下代码,这会导致想要的行为,即使它不太干净:

<div id="div1" style="display:none">¡</div>
<div id="div2" style="display:none">¿</div>

<div id="test">
</div>

<script>
(function () {
  document.getElementById("test").innerHTML = 'ñéúüëò¡!¿?';
  alert('ñéúüëò'+ document.getElementById('div1').innerHTML + '!' + document.getElementById('div2').innerHTML +'?');
})();
</script>

有人可以解释我如何在不使用外部js文件的情况下编写正确且干净的代码来解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

'ñéúüëò¡!¿?'

可以写

'ñéúüëò\u00a1!\u00bf?'

这可能会使它超越任何过度转义的脚本元素正在发生或者

 '\u00f1\u00e9\u00fa\u00fc\u00eb\u00f2\u00a1\u0021\u00bf\u003f'

仅包含7位ASCII码点,因此不太可能遇到字符集混淆或过度热心的转发器。

\u00f1对unicode代码点241进行编码。更一般地,\u后跟4个十六进制数字对代码点进行编码,其整数值由4个十六进制数字指定。