Windfly`s Blog-一个注重技术分享的博客
  1. 首页
  2. 技术研究
  3. 内容

PHP利用header和meta实现页面编码声明

声明html文件的两种方法:

  • header方法来指定PHP页面(HTML页面)的页面编码

    在PHP中,我们可以利用header方法来指定PHP页面的页面编码,具体方法如下:

    header(“Content-type: text/html; charset=xxx″); // 编码可以是utf-8,gb2312,big5等等。

ps: 函数header()的作用是把括号里面的信息发到http标头,通常情况header()的声明放在php页面的首页。

  • 利用meta设置PHP页面编码

具体用法:

 

META标签的作用是声明客户端的浏览器用什么字符集编码显示该页面,xxx可以为GB2312,GBK,UTF-8(和MySQL不同,MySQL是 UTF8)等等。推荐html文档在meta中声明编码,且编码的声明一定要在文件开始的1024字节内完成,所以最好在head标签开始时立即声明。(起码在可能包含特定语言字符的 元素之前)。

延伸: AddDefaultCharset声明编码

Apache 根目录的 conf 文件夹里,有整个Apache的配置文档httpd.conf。

用文本编辑器打开httpd.conf,第708行(不同版本可能不同)有AddDefaultCharset xxx,xxx为编码名称。这行代码的意思:设置整个服务器内的网页文件https标头里的字符集为你默认的xxx字符集。有这行,就相当于给每个文件都 加了一行header(“content-type:text/html; charset=xxx”)。这下就明白为什么明明meta设置了是utf-8,可浏览器始终采用gb2312的原因。

如果网页里有header(“content-type:text/html; charset=xxx”),就把默认的字符集改为你设置的字符集,所以这个函数永远有用。如果把AddDefaultCharset xxx前面加个“#”,注释掉这句,而且页面里不含header(“content-type…”),那这个时候就轮到meta标签起作用了。




用header或meta实现PHP页面编码的区别

现代浏览器对于服务器响应的html文件编码的确定流程,各有不同,针对一般情况,浏览器先会从http头里的content-type获取编码,如果有则设置html文档为该指定编码,如果没有则会进行内容嗅探(以ASCII编码解析文档前1024字节),比如:查看是否有meta声明编码,如果有,则从ascii编码转化成meta声明的编码,重新开始解析html文档。另外,有些浏览器(eg:chrome)查看编码的优先级顺序:是否有DOM->http的header是否制定编码->meta是否声明编码->如果都没有,会消极的选择一种解码方案。



总结:

推荐使用header(“content-type:text/html; charset=xxx”)。



  php 编码
分享到

作者  :  windfly

本文由 windfly 原创,未经作者许可禁止转载!转载若许可请注明来自 Windfly`s Blog



评论列表