我正在尝试优化我的框架处理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标头?
答案 0 :(得分:5)
我无法更好地描述它:The Road to HTML 5: character encoding
这是一个7步算法;步骤4有2个子步骤,其中第一个有7个分支,其中一个有8个子步骤,其中一个实际链接到一个单独的算法,它本身有7个步骤...它会持续一段时间。它的要点是
“Content-Type”字段中的HTTP“charset”参数。在PHP代码中:
header('Content-Type: text/html;charset=UTF-8');
字节顺序标记HTML文档本身中的任何其他数据之前。 - 我无法建议实际使用该功能。如果您愿意,只需相应地保存您的文件,但不要期望header()
调用能够完美地运行。另一种方法是在PHP中手动输出BOM:
echo "\xEF\xBB\xBF"; # UTF-8 BOM
但即便如此,我也不建议输出BOM,因为这是输出的向后不兼容的更改。这些指南适用于阅读 - 而不是输出。
具有“charset”属性的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">
这些是要点。我的建议如下:
如果您的目标是完全不知道编码的系统,请使用US-ASCII并将其他所有不作为HTML实体的部分掩盖。
注意:此权限建议用于输出到浏览器而不是用于存储,存储属于您所在区域,确保您在处理商店时了解编码。不要使用HTML实体,例如当你不真正需要它时将HTML写入你的mysql数据库(例如HTML链接中的
&
)。