对于页面编码导致乱码的理解
以前也遇到过不只一次的编码不一致的问题,今天和 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可以用程序来改变
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