Ben*_*enG 8 html javascript unicode
当我使用JavaScript设置HTML页面的标题时,我看到了一些奇怪的行为.如果我直接在标题中插入html字符引用,则Unicode呈现正确,例如:
<title>吧出</title>
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试通过JavaScript使用html字符引用,似乎有些东西将&转换为(&)(将它们分开,因此SO不会将其转回到&符号),从而打破编码,导致它成为呈现为完整的编码字符串:
function execTitleChange() {
document.title = "吧出";
}
Run Code Online (Sandbox Code Playgroud)
(我应该注意这是一个小小的猜测;当我在执行这个JavaScript函数后使用Firebug对DOM进行内省时,我在那里看到&而不是&.)
如果我在从JavaScript设置值时使用\ u编码的Unicode字符,那么一切都可以正常工作:
function execTitleChange() {
document.title = "\u5427\u51fa";
}
Run Code Online (Sandbox Code Playgroud)
因为我认为JavaScript代表Unicode字符的方式,所以\ u编码字符对我有用是有意义的,但我很难理解为什么在使用html字符引用时行为会有所不同.
Poi*_*nty 21
JavaScript字符串常量由JavaScript解析器解析.HTML标记内的文本由HTML解析器解析.两种语言(以及扩展名,它们的解析器)是不同的,特别是它们具有通过字符代码表示字符的不同方式.
因此,您发现的实际情况是:-) \u在JavaScript中使用转义符号,并&#nnnn;在HTML/XML中使用HTML实体().
编辑 - 现在,当您谈论从 JavaScript 创建/插入HTML时,情况会变得更加混乱.当您使用.innerHTML从JavaScript更新DOM时,您基本上将HTML源代码移交给HTML解析器进行解释.出于这个原因,你可以使用JavaScript \u转义或HTML实体,事情会起作用(除了字符编码不匹配的痛苦问题等).
最后,请注意JavaScript还提供了String.fromCharCode()从数字字符代码构造字符串的功能.
在JavaScript中使用Unicode字符的最佳方法是使用字符本身,使用编辑器或其他可以以UTF-8编码存储它们的工具.你会避免很多困惑.当然,您需要正确声明.js或.html文件的字符编码.
该构造吧在JavaScript中没有特殊含义; 它只有八个Ascii字符.但是,如果您的JavaScript代码已嵌入到HTML文档中,那么在传递给JavaScript解释器之前,它将由HTML规则处理.规则因HTML版本而异.避免这种结构的另一个原因.
所以写吧
document.title = "??";
Run Code Online (Sandbox Code Playgroud)
(当然,在极少数情况下你应该改变title元素内容 - 这对于搜索引擎和许多其他目的至关重要 - 在JavaScript中,而不是用HTML设置.但这不是重点.)