<meta charset="utf-8">vs<meta超文本传输协议-Equiv="Content-Type">

为了定义HTML5文档类型的字符集,我应该使用哪种符号?

  1. 短:

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

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

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

元字符集声明的两种形式是等价的,并且在浏览器上应该相同。但是,在将Web文件字符集声明为UTF-8时,您需要记住一些事情:

  1. 以UTF-8编码没有字节顺序标记(BOM)保存您的文件。
  2. 使用元字符集(如上所述)在超文本标记语言文件中声明编码。
  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格式保存文件。可以使用记事本++的免费编辑器。在程序菜单栏上,选择“编码>在没有BOM的情况下以UTF-8格式编码”。您也可以使用“编码>在没有BOM的情况下转换为UTF-8”打开文件并重新以UTF-8格式保存。

更多关于维基百科的字节顺序标记(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更清晰、更可读、更准确。

此外,绝对没有理由在元字符集属性或页面标题中使用UTF-8以外的任何值。UTF-8是自1999年HTML4以来Web文档的默认编码,也是制作现代网页的唯一实用方法。

此外,您不应该在UTF-8中使用超文本标记语言实体。像版权符号这样的字符应该直接输入。您应该使用的唯一实体是五个保留的标记字符:小于、大于、与号、素数、双素数。

实体需要一个超文本标记语言解析器,您可能并不总是想要使用它。它们会引入错误,使您的代码可读性降低,增加文件大小,有时会在各种浏览器中错误解码,具体取决于您使用的实体。了解如何输入/插入版权,商标,打开引号,关闭引号,撇号,em破折线,短折线,项目符号,欧元以及您在内容中遇到的任何其他字符,并在代码中使用这些实际字符。

Mac有一个字符查看器,您可以在键盘系统偏好中打开,您可以找到然后拖放所需的字符,或者使用匹配的键盘查看器查看要键入的键。例如,商标是选项+2。UTF-8包含来自每种书面人类语言的所有字符和符号。

所以没有理由使用--而不是em dash。学习标点符号和排版的规则也不是一个坏主意…例如,知道句点在一个封闭的引用中,而不是在外面。

使用标记内容类型和编码是非常重要的讽刺的是,因为不知道这些东西,你无法解析文件获取元标记的值。

不,那不是真的。浏览器开始解析文件作为浏览器的默认编码,UTF-8或ISO-8859-1。由于US-ASCII是ISO-8859-1 UTF-8的子集,浏览器可以读取无论哪种方式都很好……这是一样的。当浏览器遇到元字符集标记时,如果编码与浏览器已经使用的编码不同,浏览器将以指定的编码重新加载页面。

这就是为什么我们将元字符集标记放在顶部,就在头标记之后,甚至在其他任何东西之前,甚至是标题。这样您就可以在标题中使用UTF-8字符。

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

这不是严格正确的。如果您的文档中只有US-ASCII字符,您可以将其另存为US-ASCII并将其作为UTF-8,因为它是一个子集。但如果有Unicode字符,您是正确的,您必须另存为UTF-8而没有BOM。

如果你想要一个好的文本编辑器来保存你的文件在UTF-8中,我推荐Notepad++。

在Mac上,使用Mac App Store的Bare Bones文本牧马人(免费)或Mac App Store的Bare BonesBBEdit,价格为39.99美元……对于这样一个很棒的工具来说非常便宜。

在任一应用程序中,文档窗口底部都有一个菜单,您可以在其中指定文档编码,您可以轻松选择“UTF-8 no BOM”。当然,您可以在偏好中将其设置为新文档的默认值。

但是如果您的Web服务器在HTTP标头中提供编码,这是推荐的,两个[meta标签]都是不必要的。

这是不正确的。您当然应该在HTTP标头中设置编码,但您也应该在meta字符集属性中设置它,以便用户可以将页面设置为保存,从浏览器到本地存储,然后稍后再次设置为打开,在这种情况下,唯一存在的编码指示是meta charset属性。

在服务器上,基本标签是不必要的,但是当从本地存储打开时,基本标签使页面能够像在服务器上一样工作,所有资产都到位,等等,没有断开的链接。

AddDefaultCharset UTF-8简体中文

或者您可以像这样更改特定文件类型的编码:

AddType text/html;charset=utf-8 html

为UTF-8和拉丁-1(ISO-8859-1)文件提供服务的提示是为UTF-8文件提供“text”扩展名,并为Latin-1文件提供“txt”。

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

最后,考虑拯救您的文档与Unix行结尾,而不是传统的DOS或(经典的)Mac行结尾,这没有帮助,可能会受到伤害,尤其是在我们离这些传统系统越来越远的时候。

一个具有有效HTML5、UTF-8编码和Unix行结尾的超文本标记语言文档做得很好。您可以共享、编辑、存储、读取和恢复,并在许多情况下依赖该文档。它是通用语言。它是数字纸张。

<meta charset="utf-8">是为HTML5引入的。

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

在适当的时候,旧的风格必然会被弃用在不久的将来。我会坚持新的<meta charset="utf-8">

只有一个办法,但是向上。在技术的情况下,那就是逐步淘汰旧的(真的,真的很快)

文档:超文本标记语言元字符集属性

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

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

在不质疑其他答案的同时,我认为以下内容值得一提。

  1. “长”(http-equiv)符号和“短”符号相等。先到者胜;
  2. Web服务器标头将覆盖所有<meta>标签;
  3. BOM(字节顺序标记)将覆盖一切,并且在许多情况下它将影响超文本标记语言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。请注意shell的编码。)

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

有一些基于Mozilla基金会SitePoint的新闻:

不要使用此值(http-equiv=content-type),因为它已过时。首选<meta>元素上的charset属性。

在此输入图片描述

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

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

原因是没有多少电子邮件阅读器使用HTML5,所以最好使用旧的超文本标记语言样式。实际上,使用表格比div+CSS更好。