对于页面编码导致乱码的理解

   以前也遇到过不只一次的编码不一致的问题,今天和 laruence 前辈学习了一下,终于明白了其中的一些东西

 

    1. 文件有自己的编码 ,比如windows下的ANSI、或是UTF8 。

    2. apache有一个DefaultCharset

    3. 程序中可以规定返回的编码格式,如php中的 header("Content-Type:text/html; charset=utf-8");

    4. 页面文件的头部可以规定编码:如: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

问题出来了,四种编码要是不一致,会怎么样呢?

   1. 页面没有指定charset , Apache配置defaultcharst gbk , 页面文件编码是utf-8 ,结果乱码

   2. 页面指定charset为utf-8,  Apache配置defaultcharset  gbk. 页面文件是utf-8 ,结果乱码

 3.  PHP header申明charset为utf8, Apache配置defaultcharst gbk,页面文件编码是utf8,结果正常

   4.  页面指定charset为utf-8,  Apache设置DefaultCharset off, 页面文件是utf-8 ,结果正常

结论:

   1.  apache给客户浏览器发送的HTTP头信息中,Content-Type可以用程序来改变

HTTP/1.x 200 OK
Date: Sat, 
18 Oct 2008 21:53:51 GMT
Server: Apache
/2.0.52 (Red Hat)
X
-Powered-By: PHP/5.3.0alpha2
Connection: close
Transfer
-Encoding: chunked
Content
-Type: text/html; charset=GB2312

 2. 既使,文件存储格式和页面中规定的编码一致的情况下也有可能出现乱码,因为apache中DefaultCharset和页面的规定字符集的优先级不可确定,据说不同浏览器的标准不同

 

   3。当Apache不指定defaultcharset的时候,页面编码由页面自己的meta标签指定。

 4.  当Apache指定的时候,将忽略页面中的meta标签指定的编码. 但是容许脚本直接header编码方式给客户端

 

最后,还有一个更详细的解释,来自laruence的原创 http://www.laruence.com/2008/10/16/559.html

 

 

posted @ 2009-02-27 16:46  玉米疯收  阅读(1369)  评论(2编辑  收藏  举报