<meta charset="UTF-8">
UTF-8 是现代浏览器中的默认编码器。因此,这段代码所做的只是添加了对不会自动执行此操作的浏览器的支持。我不打算支持旧版浏览器还有其他原因添加这行代码吗?
我听其他人说,忽略它可能会导致一些跨脚本攻击,坏事等等,但从未给我任何明确的例子。
还有一些旧的 HTMl 验证器在离开
<meta charset="UTF-8">.
时会抛出错误
https://validator.w3.org/nu/#file
The character encoding was not declared
然后它会这样做
process with windows-1252.
这不是很好,因为如果网站包含
windows-1252
不支持的字符,可能会导致错误。
我猜这只发生在默认不支持 UTF-8 的浏览器上。如果我忽略这个,我是否应该担心这个警告/错误?
我进行了研究,试图理解为什么使用 UTF-8,但我找不到为什么使用或不使用它的明确答案。
提前致谢。
对于任何回顾这篇文章的人,我做了更多研究,并找到了更多关于为什么要包含这行代码的原因。我从 Google Devs 找到了这个页面。这说明了
https://web.dev/charset/#resources
Lighthouse 标记未指定字符编码的页面:
因此,不包括
<meta charset="UTF-8">
会使您的 Google Lighthouse 得分较低。
这就是为什么它被认为是最佳实践
服务器和浏览器通过互联网发送数据字节来相互通信。如果服务器在发送 HTML 文件时没有指定使用哪种字符编码格式,浏览器将不知道每个字节代表什么字符。字符编码声明规范解决了这个问题。
根据我的理解,这行代码不再是“必要的”,但被认为是最佳实践。希望这对阅读本文的人有所帮助。
<meta charset>
的问题是它会被
Content-Type
标头覆盖。这可能会导致混乱和彻头彻尾的谎言(例如,以 UTF-8 保存的 HTML 但包含
<meta charset="utf-16">
)。除非您可以保证服务器不会弄乱您的字符集,否则将其保留会更安全。而且因为你必须始终知道你的服务器在做什么才能安全使用,所以你不妨在服务器级别配置它。
此外,值得注意的是,使用除 UTF-8 之外的任何内容都是一个糟糕的主意。如果您打算使用其他东西,您应该提供大量文档来说明为什么您认为这是一个好主意(但 99.999% 的情况并非如此)。
正因为如此,几乎没有任何理由将 HTML 保存为 UTF-8 以外的任何格式。正因为如此,没有理由不拥有任何东西。正因为如此,除非您的服务器由于某种原因无法处理交付
Content-Type: text/html; charset=utf-8
,否则永远没有理由有一个。
此外,解决另一个答案中提到的 Lighthouse:链接文档特别指出解决该问题的方法之一是在Content-Type
标头中发送字符集。因此,根据 Lighthouse 排名,没有理由支持
<meta charset>
。