分类: LINUX
2008-05-20 00:26:58
最近做的一个项目,把demo传到客户服务器上,有些模块变成了乱码,设置所有的JS运行都出了问题。而在我本机环境、手上另外一台服务器上测试均无问题。
那么,先明确导致乱码的核心问题:编码不一致!。
呃,如果是个人兴趣问题,打了脑残体之类的文字,则不在本文讨论范围。
1、网页的meta信息。例如:
2、文件保存时的编码选择。例如:
3、程序通过header()函数指定编码。例如php:
header(”Content-Type:text/html; charset=utf-8″);
4、客户端浏览器的编码选择
5、服务器端的WEB服务器编码设置,如Apache、IIS。
上述4个地方,有任何一个编码不一致,都可能导致乱码。例如网页的meta你设置的是utf-8,而保存时就选择gbk编码。再或者你网页是utf-8编码,你在浏览器里选择gbk编码查看,那么…可以尝试一下
今天我遇到的问题呢?首先可以确保的是meta和文件保存时的编码是一致的,均为utf-8。但当我用浏览器访问出问题的网页时,浏览器自动选择了gbk编码,乱码!当我把浏览器编码切换到utf-8编码时,网页正常。
抓取网页的header信息。发现utf-8的网页被服务器发送回来竟然变成了gbk
如此看来一定是apache的设置问题咯。
打开apache的配置文件,httpd.conf。
查找:defaultcharst
果然有这么一行 AddDefaultCharset GB2312。
注释掉,保存,重启apache。
一切恢复正常。
小结:
1、如果 apache 设置了 defaultcharset ,并且程序里没有使用header()指定编码。那么最终输出以apache的AddDefaultCharse为主。
2、除非特别必要,否者不要设置apache的AddDefaultCharse。
注意:这是我在面试的过程中,面试官提问过的,当时我回答不上,因为在较新的apache版本上(2.2x)默认没有这个设置选项,恨只恨我老爱用最新版本啊!