Apache DefaultCharSet导致网页乱码

最近做的一个项目,把demo传到客户服务器上,有些模块变成了乱码,设置所有的JS运行都出了问题。而在我本机环境、手上另外一台服务器上测试均无问题。

那么,先明确导致乱码的核心问题:编码不一致!
呃,如果是个人兴趣问题,打了脑残体之类的文字,则不在本文讨论范围。

1、网页的meta信息。例如:

<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />

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。

0 Responses to “Apache DefaultCharSet导致网页乱码”


  1. No Comments

Leave a Reply