PHP&;HTML5:UTF-8文档声明,带<;meta>;标记还是通过header()函数?

PHP&;HTML5:UTF-8文档声明,带<;meta>;标记还是通过header()函数?,php,html,utf-8,header,Php,Html,Utf 8,Header,我正在尝试优化我的框架处理HTML5页面生成的方式。现在,我要做的是在标记后面插入一个,因此它是第一个要指定的元素(因此当我传递标记和其他页面元素时,它已经被定义为以UTF-8编码) 问题是我正在阅读一些关于网站性能优化的书籍,其中大多数都建议通过内容类型声明来指定编码,而不是插入块 W3C关于字符编码检测的文档(第8.2.2.1节)本质上说,HTTP头的优先级高于任何显式声明,除非用户通过用户代理声明了内容类型的覆盖 然而,W3C验证器(这就是我用来调试HTML代码输出的原因)并没有抱怨,而是

我正在尝试优化我的框架处理HTML5页面生成的方式。现在,我要做的是在
标记后面插入一个
,因此它是第一个要指定的元素(因此当我传递
标记和其他页面元素时,它已经被定义为以UTF-8编码)

问题是我正在阅读一些关于网站性能优化的书籍,其中大多数都建议通过
内容类型
声明来指定编码,而不是插入

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

然而,W3C验证器(这就是我用来调试HTML代码输出的原因)并没有抱怨,而是警告我没有
块,因此鼓励我把它放进去(它说如果要保存呈现的页面,特别建议这样做,情况并非如此,但仍然……这让我有点困惑)


问题是。。。如何确保页面始终以UTF-8编码?我必须声明HTTP头和
标记,还是仅声明HTTP头?

我无法更好地描述它:

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

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

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

    echo "\xEF\xBB\xBF"; # UTF-8 BOM
    
    但即使这样,我也不建议输出BOM表,因为这是对输出的向后不兼容更改。这些指导原则是用于阅读,而不是输出

  • 带有“charset”属性的元声明。请这样做,这是一个好的做法。在HTML 5中,即:

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

    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    
    
    
  • 未指定的启发式分析。-您对此没有影响
这些就是要点。我的建议如下:

  • 检查您的Web服务器在提供HTML时是否发送了正确的标题
  • 将HTML和那些元标记一起保存,这样就可以将HTML文件保存在磁盘上,然后在浏览器中打开它(脱机,存档)
  • 如果使用UTF-8,请勿将BOM放入文档中
  • 不要使用UTF-16或UTF-32,如果使用Unicode,请使用UTF-8
如果您针对的是完全不知道编码的系统,请使用US-ASCII,并将其以外的所有内容屏蔽为HTML实体

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


我无法形容它比:正是我在寻找的。谢谢!:)