首页 文章

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

提问于
浏览
1426

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

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

7 回答

  • 240

    在HTML5中,它们是等效的 . 使用较短的一个,它更容易记住和键入 . Browser support is fine因为它是为了向后兼容而设计的 .

  • 17

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

    • 在没有byte-order mark(BOM)的情况下以UTF-8编码保存文件 .

    • 使用meta charset(如上所述)在HTML文件中声明编码 .

    • 您的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++ . 在程序菜单栏上,选择"Encoding > Encode in UTF-8 without BOM" . 您也可以使用"Encoding > Convert to UTF-8 without BOM"打开文件并以UTF-8重新保存 .

    更多关于Byte Order Mark (BOM) at Wikipedia .

  • 10

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

    <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之外的任何值 . 自1999年HTML4以来,UTF-8是Web文档的默认编码,也是制作现代网页的唯一实用方法 .

    此外,您不应该使用UTF-8中的HTML实体 . 应直接输入版权符号等字符 . 您应该使用的唯一实体是5个保留的标记字符:小于,大于,&符号,素数,双素数 . 实体需要一个HTML解析器,您可能不会总是想要继续使用它们,它们会引入错误,使您的代码可读性降低,增加文件大小,有时根据您使用的实体在各种浏览器中错误地解码 . 了解如何在内容中输入/插入版权,商标,公开引用,近距离引用,撇号,短划线,短划线,项目符号,欧元以及您遇到的任何其他字符,并在代码中使用这些实际字符 . Mac有一个可以在键盘系统首选项中打开的字符查看器,您可以找到并拖放所需的字符,或使用匹配的键盘查看器查看要键入的键 . 例如,商标是选项2. UTF-8包含来自每种书面人类语言的所有字符和符号 . 因此没有理由使用 - 而不是使用短划线 . 学习标点符号和排版规则也不是一个坏主意......例如,知道一段时间是在一个紧密的引用内,而不是在外面 .

    对内容类型和编码之类的内容使用标记非常具有讽刺意味,因为在不知道这些内容的情况下,您无法解析文件以获取元标记的值 .

    不,那不是真的 . 浏览器开始将文件解析为浏览器的默认编码,UTF-8或ISO-8859-1 . 由于US-ASCII是ISO-8859-1和UTF-8的子集,因此浏览器可以正常读取......它是相同的 . 当浏览器遇到元字符集标记时,如果编码与浏览器已使用的编码不同,则浏览器将以指定的编码重新加载页面 . 这就是为什么我们将元字符集标记放在顶部,紧跟在head标记之后,在其他任何内容之前,甚至是 Headers . 这样你就可以在 Headers 中使用UTF-8字符 .

    您必须以UTF-8编码保存文件而不使用BOM

    这不完全正确 . 如果文档中只有US-ASCII字符,则可以将其另存为US-ASCII并将其作为UTF-8提供,因为它是一个子集 . 但是如果有Unicode字符,那么你是正确的,你必须保存为没有BOM的UTF-8 .

    如果你想要一个能用UTF-8保存文件的好文本编辑器,我推荐使用Notepad .

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

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

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

    AddDefaultCharset 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文档是一项出色的工作 . 您可以在许多上下文中共享和编辑,存储和读取,恢复和依赖该文档 . 这是通用语 . 这是数码纸 .

  • 1004

    <meta charset="utf-8"> was introduced with/for HTML5.

    如文档中所述,两者都是有效的 . 但是, <meta charset="utf-8"> 仅适用于HTML5(更容易输入/记住) .

    In due time, the old style is bound to become deprecated 在不久的将来 . 我坚持新的 <meta charset="utf-8"> .

    There's only one way, but up. In tech's case, that's phasing out the old (really, REALLY fast)

    Documentation: HTML meta charset Attribute—W3Schools

  • 0

    虽然没有对其他答案提出异议,但我认为以下值得一提 .

    • “长”( http-equiv )符号和“短”符号相同,以先到者为准;

    • Web服务器头将覆盖所有 <meta> 标记;

    • BOM(字节顺序标记)将覆盖所有内容,并且在许多情况下它会影响html 4(也可能是其他东西);

    • 如果你没有_t91926_ s utf-8;

    • 如果没有其他线索,浏览器将尝试读取您的文档,就好像它是用ASCII来获取编码一样,因此您不能使用任何奇怪的编码(尽管如此,utf-16也应该使用BOM);

    • 虽然规范说编码声明必须在文档的前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 进行测试 . (当然,您需要更改或删除部件 . 物料清单部分是 \xef\xbb\xbf . 请注意您的shell编码 . )

    请注意,明确声明编码非常重要 . 让浏览器猜测会导致安全问题 .

  • 80

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

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

  • 30

    有一些新闻基于Mozilla Foundationsitepoint

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

相关问题