PHP&HTML5:带有<meta>标签或header()函数的UTF-8文档声明?

Jul*_*sen 2 php html5 header utf-8

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

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

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

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

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

hak*_*kre 5

我无法更好地描述它:HTML 5之路:字符编码

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

  • 用户覆盖. - 你对此没有任何影响
  • "Content-Type"字段中的HTTP"charset"参数.在PHP代码中:

    header('Content-Type: text/html;charset=UTF-8');
    
    Run Code Online (Sandbox Code Playgroud)
  • 字节顺序标记HTML文档本身中的任何其他数据之前. - 我无法建议实际使用该功能.如果您愿意,只需相应地保存您的文件,但不要期望这些header()呼叫能够完美运行.另一种方法是在PHP中手动输出BOM,即:

    echo "\xEF\xBB\xBF"; # UTF-8 BOM
    
    Run Code Online (Sandbox Code Playgroud)

    但即使如此,我不能推荐输出BOM,因为这是一个向后兼容的改变输出.这些指南适用于阅读 - 而不是输出.

  • 具有"charset"属性的META声明. - 请这样做,这是一个很好的做法.在HTML 5中:

    <meta charset="UTF-8">
    
    Run Code Online (Sandbox Code Playgroud)
  • 具有"http-equiv"属性设置为"Content-Type"的META声明和为"charset"设置的值.- 为什么不?!在HTML 5中将是:

    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    
    Run Code Online (Sandbox Code Playgroud)
  • 未指定的启发式分析. - 你对此没有任何影响.

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

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

如果您的目标是完全不知道编码的系统,请使用US-ASCII并将其他所有不作为HTML实体的部分掩盖.

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