Chinaunix首页 | 论坛 | 博客
  • 博客访问: 511074
  • 博文数量: 81
  • 博客积分: 7010
  • 博客等级: 少将
  • 技术积分: 1500
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-15 10:51
文章分类

全部博文(81)

文章存档

2011年(1)

2009年(22)

2008年(58)

我的朋友

分类: 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)默认没有这个设置选项,恨只恨我老爱用最新版本啊!

阅读(2516) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~