<meta charset =“ utf-8”> 与 <meta http-equiv =“ Content-Type”>

为了为HTML5 Doctype定义字符集,我应该使用哪种表示法?

  1. 短:

    <meta charset="utf-8" />
  2. 长:

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

答案

在 HTML5 中,它们是等效的。使用较短的那一个,更容易记住和键入。 浏览器支持很好,因为它是为向后兼容而设计的。

两种形式的meta charset声明都是等效的,并且在浏览器之间应相同。但是,在将 Web 文件的字符集声明为 UTF-8 时,需要记住一些事项:

  1. 不带 字节顺序标记 (BOM)的 UTF-8 编码格式保存文件。
  2. 使用元字符集声明 HTML 文件中的编码(如上)。
  3. 您的 Web 服务器必须提供文件,并在 Content-Type HTTP 标头中声明 UTF-8 编码。

默认情况下,Apache 服务器配置为提供 ISO-8859-1 中的文件,因此您需要在.htaccess文件中添加以下行:

AddDefaultCharset UTF-8

这将配置 Apache 来为您的文件提供服务,以在 Content-Type 响应标头中声明 UTF-8 编码,但是首先必须将文件保存在 UTF-8(不带 BOM)中。

如果没有 BOM 表,记事本无法将文件保存为 UTF-8。一个可以是Notepad ++ 的免费编辑器。在程序菜单栏上,选择 “编码> 在没有 BOM 的 UTF-8 中编码”。您还可以使用 “编码> 转换为不带 BOM 的 UTF-8” 打开文件并将其重新保存为 UTF-8。

有关Wikipedia字节顺序标记(BOM)的更多信息。

简短的另一个原因是,它与您可以在标记中指定字符集的其他实例匹配。例如:

<script type="javascript" charset="UTF-8" src="/script.js"></script>

<p><a charset="UTF-8" href="http://example.com/">Example Site</a></p>

一致性有助于减少错误并使代码更具可读性。

请注意,charset 属性不区分大小写。您可以使用 UTF-8 或 utf-8,但是 UTF-8 更清晰,可读性更高,更准确。

另外,绝对没有理由在 meta charset 属性或页面标题中使用除 UTF-8 以外的任何值。自 1999 年 HTML4 以来,UTF-8 是 Web 文档的默认编码,并且是制作现代 Web 页面的唯一实用方法。

另外,您不应该在 UTF-8 中使用 HTML 实体。诸如版权符号之类的字符应直接输入。您应该使用的唯一实体是 5 个保留的标记字符:小于,大于,&符,质数,双质数。实体需要一个 HTML 解析器,您可能并不一定会一直使用它,它们会引入错误,使您的代码可读性降低,文件大小增加,有时会根据您使用的实体在各种浏览器中解码不正确。了解如何在内容中键入 / 插入版权,商标,引号,右引号,撇号,破折号,破折号,项目符号,欧元以及您在内容中遇到的任何其他字符,以及如何在代码中使用这些实际字符。 Mac 有一个 “字符查看器”,您可以在 “键盘系统首选项” 中打开它,然后找到并拖放所需的字符,或者使用匹配的 “键盘查看器” 查看要键入的键。例如,商标为 Option + 2。 UTF-8 包含来自每种书面人类语言的所有字符和符号。因此,没有理由使用 - 而不是破折号。学习标点符号和排版的规则也不错…… 例如,知道句点在引号内,而不是在引号内。

将标记用于内容类型和编码之类具有讽刺意味,因为不了解这些内容,就无法解析文件来获取 meta 标记的值。

不,那不是真的。浏览器开始将文件解析为浏览器的默认编码,即 UTF-8 或 ISO-8859-1。由于 US-ASCII 是 ISO-8859-1 UTF-8 的子集,因此浏览器可以任意一种方式进行读取... 相同。当浏览器遇到 meta charset 标记时,如果编码与浏览器已经使用的编码不同,则浏览器将以指定的编码重新加载页面。这就是为什么我们将 meta charset 标记放在顶部,紧随 head 标记之后,再加上其他任何内容,甚至标题。这样,您可以在标题中使用 UTF-8 字符。

您必须以没有 BOM 的 UTF-8 编码保存文件

严格说来并非如此。如果文档中仅包含 US-ASCII 字符,则可以将其另存为 US-ASCII 并用作 UTF-8,因为它是一个子集。但是,如果有 Unicode 字符,那是正确的,您必须另存为 UTF-8,而不使用 BOM。

如果您想要一个好的文本编辑器来将文件保存为 UTF-8,我建议使用 Notepad ++。

在 Mac 上,可以使用 Mac App Store 中的 Bare Bones TextWrangler(免费),也可以在 Mac App Store 中使用 Bare Bones BBEdit,价格为 39.99 美元…… 对于这样一款出色的工具来说非常便宜。在任一应用程序中,文档窗口底部都有一个菜单,您可以在其中指定文档编码,并且可以轻松选择 “UTF-8 no BOM”。当然,您可以在 “首选项” 中将其设置为新文档的默认值。

但是,如果建议您的 Web 服务器在 HTTP 标头中提供编码,则不需要两个 [meta 标签]。

那是不对的。当然,您应该在 HTTP 标头中设置编码,但也应该在 meta charset 属性中设置编码,以便用户可以将页面从浏览器中保存到本地存储中,然后在以后再次打开。唯一出现的编码指示是 meta charset 属性。您还应出于相同的原因设置基本标签... 在服务器上,基本标签是不必要的,但是当从本地存储中打开时,基本标签使页面就像在服务器上一样工作,所有资产到位等等,没有断开的链接。

添加默认字符集 UTF-8

或者,您可以只更改特定文件类型的编码,如下所示:

AddType text/html;charset=utf-8 html

同时提供 UTF-8 和 Latin-1(ISO-8859-1)文件的技巧是为 UTF-8 文件提供 “文本” 扩展名,为 Latin-1 文件提供 “txt”。

AddType text/plain;charset=iso-8859-1 txt
AddType text/plain;charset=utf-8 text

最后,考虑使用 Unix 行尾而不是传统 DOS 或(经典)Mac 行尾来保存文档,这无济于事,并且可能会造成伤害,尤其是随着我们与那些旧系统的距离越来越远,这种情况尤其严重。具有有效 HTML5,UTF-8 编码和 Unix 行尾的 HTML 文档是一项出色的工作。您可以在许多情况下共享,编辑,存储,读取和恢复以及依赖该文档。是通用语言。是数字纸。

<meta charset="utf-8">随 HTML5 一起引入。

如文档中所述,两者均有效。但是, <meta charset="utf-8">仅适用于 HTML5(并且更易于键入 / 记住)。

在适当的时候,旧样式肯定会在不久的将来被淘汰 。我会坚持使用新的<meta charset="utf-8">

只有一种方法,但是向上。以技术为例,那是淘汰旧的(真的,真的很快)

文档: HTML 元字符集属性 - W3Schools

在不反对其他答案的同时,我认为以下值得一提。

  1. “长”( http-equiv )符号和 “短” 符号相等,以先到者为准;
  2. Web 服务器头将覆盖所有<meta>标记;
  3. BOM(字节顺序标记)将覆盖所有内容 ,并且在许多情况下,它将影响 html 4(可能还会影响其他内容);
  4. 如果不声明任何编码,则可能会使用浏览器定义的 “后备文本编码” 来获取文本。在 Firefox 和 Chrome 中都不是 utf-8;
  5. 在没有其他线索的情况下,浏览器将尝试像读取 ASCII 文件一样读取文档,以获取编码,因此您不能使用任何奇怪的编码(不过,使用 BOM 的 utf-16 应该可以);
  6. 虽然规范说编码声明必须在文档的前 512 个字节之内,但大多数浏览器会尝试读取更多内容。

您可以通过运行echo 'HTTP/1.1 200 OK\r\nContent-type: text/html; charset=windows-1251\r\n\r\n\xef\xbb\xbf<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta charset="windows-1251"><title>привет</title></head><body>привет</body></html>' | nc -lp 4500并将您的浏览器指向localhost:4500 。 (当然,您将需要更改或删除部件。BOM 部件为\xef\xbb\xbf 。请注意外壳的编码。)

请注意,显式声明编码非常重要。让浏览器猜测可能导致安全问题。

使用 HTML5 时,对 Web 浏览器使用<meta charset="utf-8" />

使用 HTML4 或 XHTML 或用于过时的 dom 解析器(如 php 5.3 中的DOMDocument ,请使用<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

有一些基于Mozilla Foundationsitepoint 的新闻

不要使用此值( http-equiv=content-type ),因为它已过时。在 < meta > 元素上首选charset属性。 在此处输入图片说明

要将签名嵌入到电子邮件中,我将使用长版本:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

原因是使用 html5 的电子邮件阅读器并不多,因此始终最好使用旧的 html 样式。实际上,使用表也比使用 divs + css 更好。