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

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

  1. 短:

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

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

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

元字符集声明的两种forms都是相同的,应该在不同的浏览器上工作。 但是,在将Web文件字符集声明为UTF-8时,需要记住一些事项:

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

Apache服务器configuration为默认提供ISO-8859-1中的文件,因此您需要将以下行添加到.htaccess文件中:

 AddDefaultCharset UTF-8 

这将configurationApache在Content-Type响应头中为您的文件提供声明UTF-8编码的文件,但是您的文件必须以UTF-8(不包含BOM)保存。

记事本不能以没有BOM的UTF-8保存文件。 一个免费的编辑器,可以是Notepad ++ 。 在程序菜单栏上,select“编码”>“不带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> 

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

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

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

你也不应该在UTF-8中使用HTML实体。 像版权符号这样的字符应直接input。 您应该使用的唯一实体是5个保留的标记字符:小于,大于,&,prime,double prime。 实体需要一个HTMLparsing器,您可能并不总是希望继续使用它,它会引入错误,使您的代码更less可读,增加文件大小,并且有时会根据您使用的实体在各种浏览器中正确解码。 了解如何在您的内容中input/插入版权,商标,公开报价,closures报价,撇号,em短划线,短划线,子弹,欧元以及您遇到的任何其他字符,并在代码中使用这些实际字符。 Mac有一个字符查看器,您可以在“键盘系统首选项”中打开,然后可以find并拖放需要的字符,或使用匹配的键盘查看器查看要键入的键。 例如,商标是Option + 2。 UTF-8包含所有书面人类语言的所有字符和符号。 所以没有理由使用 – 而不是一个破折号。 学习标点和排版的规则也是一个不错的主意,例如,知道一段时间内接近引用,而不是外部。

使用标签来处理内容types和编码是非常具有讽刺意味的,因为如果不知道这些东西,就无法parsing文件以获取元标记的值。

不,这是不正确的。 浏览器开始parsing文件作为浏览器的默认编码,UTF-8或ISO-8859-1。 由于US-ASCII是ISO-8859-1 UTF-8的一个子集,所以浏览器可以很好地读取它们,这是相同的。 当浏览器遇到元字符集标记时,如果编码与浏览器已经使用的编码不同,浏览器将以指定的编码重新加载页面。 这就是为什么我们把meta charset标签放在顶部标签之后,在标签之前,甚至标题之前。 这样你可以在标题中使用UTF-8字符。

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

这不完全正确。 如果您的文档中只有US-ASCII字符,则可以将其另存为US-ASCII并作为UTF-8提供,因为它是子集。 但是,如果有Unicode字符,则表示您正确,则必须另存为不含BOM的UTF-8。

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

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

但是,如果您的Web服务器在HTTP标头中使用编码,那么这两个[meta标签]都是不必要的。

这是不正确的。 您当然应该在HTTP标头中设置编码,但是您还应该在元字符集属性中进行设置,以便用户可以保存该页面,将其从浏览器中移出到本地存储,然后再次打开,在这种情况下将存在的编码的唯一指示是元字符集属性。 你也应该设置一个基本的标签出于同样的原因…在服务器上,基本标签是不必要的,但是从本地存储打开时,基本标签使页面工作,就好像它在服务器上,所有的资产到位等,没有断链。

AddDefaultCharset UTF-8

或者你可以改变特定文件types的编码,如下所示:

 AddType text/html;charset=utf-8 html 

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

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

最后,考虑使用Unix行结尾来保存文档,而不是传统的DOS或(经典的)Mac行结尾,这些行不通并且可能会受到伤害,特别是随着我们距离那些传统系统越来越远。 具有有效的HTML5,UTF-8编码和Unix行结尾的HTML文档是一项很好的工作。 您可以在许多情况下共享和编辑,存储和读取和恢复,并依赖于该文档。 这是通用语言。 这是数码纸。

HTML5引入了/ <meta charset="utf-8">

正如文件中提到的,两者都是有效的。 但是, <meta charset="utf-8">仅适用于HTML5(并且更容易input/记住)。

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

只有一种方法,但最多。 在技​​术的情况下,这是淘汰旧(真的,真的很快)

文档: HTML元字符集Attribute-W3Schools

虽然没有提出其他答案,但我认为以下是值得一提的。

  1. “长”( http-equiv )表示和“短”表示相等,以先到者为准;
  2. Web服务器头将覆盖所有的<meta>标签;
  3. BOM(字节顺序标记)将覆盖所有的东西 ,在很多情况下,它会影响HTML 4(也可能是其他的东西)。
  4. 如果您没有声明任何编码,您可能会在您的浏览器中定义的“回退文本编码”中获得文本。 在Firefox和Chrome中都不是utf-8;
  5. 在没有其他线索的情况下,浏览器将尝试读取文档,就好像它是用ASCII编码的一样,所以你不能使用任何奇怪的编码(尽pipe如此,应该使用带有BOM的utf-16)。
  6. 尽pipe规范说编码声明必须在文档的前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 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 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的编码。)

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

使用HTML5时,请使用<meta charset="utf-8" />作为网页浏览器。

当使用HTML4或XHTML或过时的domparsing器时,使用<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

有一些基于Mozilla基金会和sitepoint的消息

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