<meta charset="utf-8"> vs <meta http-equiv="Content-Type">
vs
技术背景
在网页开发中,正确设置字符编码至关重要,它能确保网页上的文字被浏览器正确解析和显示。<meta charset="utf-8">
和 <meta http-equiv="Content-Type">
这两个标签都用于指定网页的字符编码,但它们在不同的 HTML 版本中有不同的应用。
实现步骤
1. 选择合适的编码声明
- HTML5:推荐使用
<meta charset="utf-8">
,它是 HTML5 引入的简化写法,更易记忆和输入。 - HTML4 或 XHTML:使用
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
。对于一些旧的 DOM 解析器,如 PHP 5.3 中的DOMDocument
,也需要使用这种旧格式。 - 电子邮件签名:由于很多电子邮件阅读器不支持 HTML5,建议使用
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
。
2. 文件保存为 UTF - 8 无 BOM 编码
确保你的文件以 UTF - 8 编码保存,并且不包含字节顺序标记(BOM)。可以使用 Notepad++、TextWrangler(Mac 免费)或 BBEdit(Mac 付费)等编辑器来实现。
- Notepad++:在菜单栏选择“Encoding > Encode in UTF - 8 without BOM”。
- TextWrangler/BBEdit:在文档窗口底部的菜单中指定文档编码为“UTF - 8 no BOM”,还可以在“Preferences”中设置为新文档的默认编码。
3. 服务器配置
如果使用 Apache 服务器,默认情况下它以 ISO - 8859 - 1 编码提供文件。需要在 .htaccess
文件中添加以下行:
1 |
|
也可以针对特定文件类型更改编码:
1 |
|
如果要同时提供 UTF - 8 和 Latin - 1(ISO - 8859 - 1)文件,可以这样设置:
1 |
|
核心代码
HTML5 编码声明
1 |
|
HTML4 或 XHTML 编码声明
1 |
|
最佳实践
- 一致性:在整个项目中保持编码声明的一致性,使用
<meta charset="utf-8">
与其他标记中指定字符集的方式保持一致,例如<script>
和<a>
标签。 - 位置:将
<meta charset>
标签放在<head>
标签之后的顶部,以便在解析页面其他部分之前指定编码,这样可以在标题中使用 UTF - 8 字符。 - 明确声明:始终明确声明编码,避免让浏览器猜测,以防止安全问题。
常见问题
1. 编码声明的优先级
- 如果同时存在“长”(
http-equiv
)和“短”(charset
)两种声明,先出现的声明优先。 - 服务器的 HTTP 头会覆盖所有
<meta>
标签。 - BOM(字节顺序标记)会覆盖一切,并且在很多情况下会影响 HTML 4。
2. 未声明编码的情况
如果没有声明任何编码,浏览器可能会使用其默认的“后备文本编码”,Firefox 和 Chrome 的默认编码都不是 UTF - 8。
3. 关于 BOM
BOM 会影响网页的编码解析,应尽量避免使用。如果文档中只有 US - ASCII 字符,可以将文件保存为 US - ASCII 并以 UTF - 8 提供服务,但如果有 Unicode 字符,则必须保存为无 BOM 的 UTF - 8 编码。
<meta charset="utf-8"> vs <meta http-equiv="Content-Type">
https://119291.xyz/posts/meta-charset-vs-meta-http-equiv-content-type/