PHP和HTML5:UTF-8的文档声明与 标签或通过header()函数?(PHP & HT

2019-09-20 20:10发布

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

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

上字符编码检测(部8.2.2.1)的W3C文档说,实质上,所述HTTP标头具有上述任何显式声明,除非用户声明,用于通过所述用户代理的内容类型的覆盖优先级。

然而,W3C验证(这就是为什么我用我的调试HTML代码输出)不投诉,但警告我关于缺席的<meta charset="utf-8"/>块,从而鼓励我把它(它说,它特别建议,如果所呈现的页面将被保存,这是不是这样的,但仍...它混淆了我一个位)。

现在的问题是...我怎样才能确保在UTF-8编码的页面总是指定? 我要声明的HTTP头和<meta>标记或者仅仅是HTTP头?

Answer 1:

我无法描述它优于: 路到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,因为这是对输出的向后兼容改变。 这些准则是阅读 - 不输出。

  • 元声明与“字符集”属性。 - 请这样做,这是很好的做法。 在HTML 5是:

     <meta charset="UTF-8"> 
  • 甲META声明与一个“HTTP-当量”属性设置为“内容类型”和“字符集”设定的值。 - 为什么不?! 在HTML 5,这将是:

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

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

  • 检查服务于HTML,当你的Web服务器发送正确的头。
  • 让你的HTML以及这些元标签,以便它可以保存在磁盘上的HTML文件,后来在一个浏览器(离线归档)打开它。
  • 如果你使用UTF-8,不要把BOM的文档中。
  • 不要使用UTF-16或UTF-32,如果你使用Unicode,使用UTF-8。

如果您靶向是完全不知道到编码系统,使用US-ASCII和掩盖它的一切不是一部分的HTML实体。

注意:此entitites建议是输出到浏览器,而不是用于存储,存储的东西,在您的区域下降,确保您知道有关编码,当你处理你的店。 不要使用HTML实体,例如当你写HTML到您的MySQL数据库的时候,你并不真的需要它(如&amp;在HTML链接)。



文章来源: PHP & HTML5: UTF-8 document declaration with tag or through the header() function?