2

我正在尝试优化我的框架处理 HTML5 页面生成的方式。现在,我要做的是<meta charset="utf-8"/>在标签之后插入一个<head>,所以它是要指定的第一个元素(所以当我传递<title>标签和其余页面元素时,它已经被定义为以 UTF-8 编码)。

问题是我正在阅读一些关于网站性能优化的书籍,其中大多数建议通过Content-type声明指定编码,而不是插入<meta>块。

W3C 关于字符编码检测的文档(第 8.2.2.1 节)说,基本上,HTTP 标头优先于任何显式声明,除非用户通过用户代理声明了对内容类型的覆盖。

但是,W3C 验证器(这就是我用来调试 HTML 代码输出的原因)没有抱怨,而是警告我没有<meta charset="utf-8"/>块,因此鼓励我把它(它说如果渲染页面是特别推荐的)得救,事实并非如此,但仍然......它让我有点困惑)。

问题是......如何确保页面始终指定为 UTF-8 编码?我必须声明 HTTP 标头和<meta>标签还是仅声明 HTTP 标头?

4

1 回答 1

5

我没有比这更好的描述了:HTML 5 之路:字符编码

这是一个7步算法;第 4 步有 2 个子步骤,其中第一个有 7 个分支,其中一个有 8 个子步骤,其中一个实际上链接到一个单独的算法,该算法本身有 7 个步骤......这样持续了一段时间. 它的要点是

  • 用户覆盖。- 你对此没有影响
  • “内容类型”字段中的 HTTP“字符集”参数。在 PHP 代码中是:

    header('Content-Type: text/html;charset=UTF-8');
    
  • HTML 文档本身中任何其他数据之前的字节顺序标记。- 我不能建议实际使用该功能。如果您愿意,只需相应地保存您的文件,但不要指望header()电话能再完美无缺地工作。另一种方法是手动输出 BOM,在 PHP 中是:

    echo "\xEF\xBB\xBF"; # UTF-8 BOM
    

    但即便如此,我也不建议输出 BOM,因为这是对输出的向后不兼容的更改。这些指南用于阅读 - 不是输出。

  • 具有“字符集”属性的 META 声明。- 请这样做,这是一个很好的做法。在 HTML 5 中是:

    <meta charset="UTF-8">
    
  • 将“http-equiv”属性设置为“Content-Type”并为“charset”设置值的 META 声明。- 为什么不?!在 HTML 5 中,这将是:

    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    
  • 未指定的启发式分析。- 你对此没有影响。

这些是要点。我的建议如下:

  • 检查您的网络服务器在提供 HTML 时是否发送了正确的标头。
  • 拥有您的 HTML 以及那些元标记,以便可以将 HTML 文件保存在磁盘上并稍后在浏览器中打开它(离线,存档)。
  • 如果您使用 UTF-8,请不要将 BOM 放入文档中。
  • 不要使用 UTF-16 或 UTF-32,如果使用 Unicode,请使用 UTF-8。

如果您的目标系统完全不了解编码,请使用 US-ASCII 并将其他不属于它的所有内容作为 HTML 实体进行掩码。

注意:此实体建议是用于输出到浏览器而不是用于存储,存储属于您的区域,请确保您在处理商店时了解编码。永远不要使用 HTML 实体,例如当你将 HTML 写入你的 mysql 数据库时,当你真的不需要它时(例如&amp;在 HTML 链接中)。

于 2012-08-05T21:08:57.517 回答