作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在阅读包含 UTF-8 字符的 HTML 文档,但是当我访问该文档的 innerHTML
时,所有“坏”字符都显示为 0xfffd
。我已经在所有主要浏览器中尝试过,它的行为方式都是相同的。当我 alert()
innerHTML
时,它会将这些字符显示为“带有 ? 标记的菱形”。
令人惊讶的是,以下代码运行完美,在警报框中正确显示了 UTF-8 字符,因此它不是 alert()
出现故障。
alert("Doppelg\u00e4nger!");
为什么我无法使用 innerHTML
访问 UTF-8 字符?或者有其他方法可以在 JavaScript 中访问它们。
最佳答案
首先检查文档头是否包含。
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
您还可以使用 javascript 读出元标记:
var metaTags = document.getElementsByTagName("META");
如果是,这就是该行为的解释。您可以尝试将 utf-8 更改为 ISO-8859-1:
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
更好的方法是对 HTML 中的所有扩展字符进行 htmlEncode。像这样:
function encodeHTML(str){
var aStr = str.split(''),
i = aStr.length,
aRet = [];
while (--i) {
var iC = aStr[i].charCodeAt();
if (iC < 65 || iC > 127 || (iC>90 && iC<97)) {
aRet.push('&#'+iC+';');
} else {
aRet.push(aStr[i]);
}
}
return aRet.reverse().join('');
}
请注意,此函数将对除 [a-zA-Z] 之外的所有内容进行编码。例如,此函数会将 Doppelgänger 编码为 Doppelgänger。
关于javascript - 使用innerHTML读取UTF8字符对所有字符返回0xfffd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/835821/
我是一名优秀的程序员,十分优秀!