关于html5:< meta charset =“utf-8”>

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

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

  • Short:

    1
    <meta charset="utf-8" />
  • 长:

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

  • 在HTML5中,它们是等效的。用短一点的,更容易记住和打字。浏览器支持很好,因为它是为向后兼容而设计的。


    两种形式的元字符集声明都是等效的,并且应该在浏览器中工作相同。但是,在将Web文件字符集声明为utf-8时,需要记住以下几点:

  • 以utf-8编码保存文件,不带字节顺序标记(bom)。
  • 使用元字符集(如上所述)在HTML文件中声明编码。
  • Web服务器必须为您的文件提供服务,在内容类型HTTP头中声明UTF-8编码。
  • 默认情况下,Apache服务器配置为服务于ISO-8859-1中的文件,因此需要将以下行添加到您的.htaccess文件中:

    1
    AddDefaultCharset UTF-8

    这将配置Apache为您在内容类型响应头中声明UTF-8编码的文件提供服务,但您的文件必须以UTF-8(不带BOM)保存才能开始。

    没有BOM,记事本无法以UTF-8格式保存文件。一个免费的编辑器,可以是记事本++。在程序菜单栏上,选择"Encoding>Encode in utf-8 without bom"。您还可以使用"编码>转换为不带BOM的UTF-8"打开文件并以UTF-8格式重新保存它们。

    更多关于维基百科的字节顺序标记(bom)。


    使用短字符集的另一个原因是它与在标记中指定字符集的其他实例相匹配。例如:好的。

    1
    2
    3
    4
    5
    <script type="javascript" charset="UTF-8" src="/script.js">

    <p>
    Example Site
    </p>Ok.

    一致性有助于减少错误并提高代码的可读性。好的。

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

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

    此外,不应使用UTF-8格式的HTML实体。像版权符号这样的字符应该直接输入。您应该使用的唯一实体是5个保留标记字符:小于、大于、与号、质数、双质数。实体需要一个HTML解析器,您可能并不总是希望使用这种解析器,它们会引入错误,降低代码的可读性,增加文件大小,有时还会在不同的浏览器中错误地解码,具体取决于您使用的实体。了解如何键入/插入版权、商标、左引号、右引号、撇号、em-dash、en-dash、bullet、euro以及在内容中遇到的任何其他字符,并在代码中使用这些实际字符。Mac有一个字符查看器,您可以在"键盘系统"首选项中打开它,您可以查找并拖放所需的字符,或者使用匹配的键盘查看器查看要键入的键。例如,商标是选项+2。UTF-8包含了每种书面人类语言的所有字符和符号。所以没有理由使用——而不是一个长划。学习标点和排版的规则也不错…例如,知道句点位于右引号内,而不是位于右引号外。好的。

    Using a tag for something like content-type and encoding is highly
    ironic, since without knowing those things, you couldn't parse the file
    to get the value of the meta tag.

    Ok.

    不,那不是真的。浏览器开始将文件解析为浏览器的默认编码,即utf-8或iso-8859-1。由于us-ascii是iso-8859-1和utf-8的一个子集,所以无论哪种方式,浏览器都可以很好地读取…它是一样的。当浏览器遇到元字符集标记时,如果编码与浏览器已经使用的编码不同,则浏览器将以指定的编码重新加载页面。这就是为什么我们把元字符集标签放在顶部,在头标签之后,在任何其他东西之前,甚至是标题之后。这样就可以在标题中使用utf-8字符。好的。< Buff行情>

    必须以UTF-8编码保存文件,而不使用BOM好的。< /块引用>

    这并非完全正确。如果文档中只有us-ascii字符,则可以将其保存为us-ascii并作为utf-8使用,因为它是一个子集。但是如果有Unicode字符,您是正确的,您必须保存为不带BOM的UTF-8。好的。

    If you want a good text editor that will save your files
    in UTF-8, I recommend Notepad++.

    Ok.

    在Mac上,使用Mac应用商店的Bare Bones TextWrangler(免费)或Mac应用商店的Bare Bones BBedit(39.99美元)。这么好的工具很便宜。在任一应用程序中,在文档窗口的底部都有一个菜单,您可以在其中指定文档编码,并且可以轻松地选择"UTF-8无BOM"。当然,您可以在首选项中将其设置为新文档的默认值。好的。

    But if your Webserver serves the encoding in the HTTP header,
    which is recommended, both [meta tags] are needless.

    Ok.

    这是不正确的。当然,您应该在HTTP头中设置编码,但是您也应该在meta-charset属性中设置编码,这样用户就可以将页面保存在浏览器外的本地存储中,然后在以后再次打开,在这种情况下,将出现的编码的唯一指示就是meta-charset属性。您还应该为同样的原因设置一个基标记…在服务器上,基标记是不必要的,但是当从本地存储中打开时,基标记使页面能够像在服务器上一样工作,并且所有资产都已就位等等,没有断开的链接。好的。

    AddDefaultCharset UTF-8

    Ok.

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

    1
    AddType text/html;charset=utf-8 html

    为utf-8和拉丁-1(iso-8859-1)文件提供服务的一个技巧是为utf-8文件提供"文本"扩展名和拉丁-1文件"txt"。好的。

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

    最后,考虑使用Unix行尾保存文档,而不是传统的DOS或(经典的)Mac行尾,这些行尾对您没有帮助,而且可能会造成伤害,尤其是当我们进一步远离这些传统系统时。具有有效HTML5、UTF-8编码和Unix行尾的HTML文档做得很好。您可以在许多上下文中共享、编辑、存储、读取、恢复和依赖该文档。这是通用语。是数码纸。好的。好啊。


    HTML5引入了

    如文档中所述,两者都是有效的。但是,只适用于HTML5(而且更容易输入/记忆)。

    在不久的将来,旧样式必然会被弃用。我会坚持使用新的。只有一条路,但往上走。在技术方面,这是逐步淘汰旧的(真的,真的很快)

    文档:html meta charset attribute-w3schools


    虽然没有对其他答案提出质疑,但我认为以下内容值得一提。

  • "长"(http-equiv符号和"短"符号相等,以先赢者为准;
  • Web服务器头将覆盖所有标记;
  • bom(字节顺序标记)将覆盖所有内容,在许多情况下,它将影响HTML 4(可能还有其他东西);
  • 如果不声明任何编码,您可能会得到定义了浏览器的"回退文本编码"中的文本。无论是在火狐还是Chrome中,它都不是UTF-8;
  • 在没有其他线索的情况下,浏览器会尝试像使用ASCII一样读取您的文档以获取编码,因此您不能使用任何奇怪的编码(不过,使用BOM的UTF-16应该可以);
  • 虽然规范说编码声明必须在文档的前512个字节内,但大多数浏览器将尝试读取更多的内容。
  • 您可以通过运行echo 'HTTP/1.1 200 OK

    Content-type: text/html; charset=windows-1251

    \xef\xbb\xbfприветпривет' | nc -lp 4500并将浏览器指向localhost:4500来进行测试。(当然,您需要更改或删除部件。物料清单部分为\xef\xbb\xbf。注意外壳的编码。)

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


    在使用HTML5时,请将用于Web浏览器。

    当使用HTML4或XHTML时,或者对于过时的DOM解析器(如PHP中的domDocument)使用


    有一些基于Mozilla基金会和SITEPONT的新闻

    Do not use this value (http-equiv=content-type) as it is obsolete.
    Prefer the charset attribute on the <meta> element.
    enter image description here