我在博客中使用javascript,但是我使用字符“¡”和“?”有一种奇怪的行为。
例如,以下代码将在div中显示 ñéúüëò¡!¿?
,但 ñéúüëò¡!¿?
作为提醒消息。
<div id="test">
</div>
<script>
(function () {
document.getElementById("test").innerHTML = 'ñéúüëò¡!¿?';
alert('ñéúüëò¡!¿?');
})();
</script>
</pre>
如果我们查看生成的代码,我们可以看到javascript标记已转换为:
<script>
(function () {
document.getElementById("test").innerHTML = 'ñéúüëò¡!¿?';
alert('ñéúüëò¡!¿?');
})();
</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文件的情况下编写正确且干净的代码来解决这个问题吗?
答案 0 :(得分:1)
'ñéúüëò¡!¿?'
可以写
'ñéúüëò\u00a1!\u00bf?'
这可能会使它超越任何过度转义的脚本元素正在发生或者
'\u00f1\u00e9\u00fa\u00fc\u00eb\u00f2\u00a1\u0021\u00bf\u003f'
仅包含7位ASCII码点,因此不太可能遇到字符集混淆或过度热心的转发器。
\u00f1
对unicode代码点241进行编码。更一般地,\u
后跟4个十六进制数字对代码点进行编码,其整数值由4个十六进制数字指定。