MT UTF-8 显示的问题

在新的Web 服务器上遇到了 UTF-8 的页面乱码问题.

问题是这样的: 迁移到新的Web服务器上之后,发现我的 MT 发布之后(包含中文)从浏览器查看是乱码.必须要从浏览器端手工指定一下编码为 UTF-8 才可以正常显示.而我的主页面 页面代码是用的 GB2312.不存在这个问题. 另外一个比较奇怪的是我的 MT 后台管理显示的中文都是正常的.而 Blog 前台页面都不正常.

我开始以为是 mt.cfg 设置的问题.于是修改 mt.cfg 的发布编码为 gb2312.可这样后台显示就有问题了.真是一波未平一波又起.于是我恢复到以前的状态,开始对比后台的页面和前端的页面差异并反复测试没有结果.接着查看 Apache 的 httpd.conf(我登陆不到主机上,这个是 cometrue 给我的参考).发现 其中的全局设定了 default charset 为gb2312 . 这个时候找 cometrue 又找不到.对 Apache 又不是非常熟悉,郁闷的睡去.

第二天一早看到 车东 在线,赶紧问问他.车东告诉了我一个小技巧:wget -S 来获取响应 code.自己虽然也常用wget ,不过对这个参数倒是第一次用.果真,从服务器端来的响应代码告诉我默认编码是 GB2312 .

MSN 联系 cometrue ,请他在dbanotes这个虚拟主机一项加上一条:AddDefaultCharset off . Apache的手册有如下解释:

当回应信息中没有在 HTTP 头中包含任何关于内容类型的参数时,此指令将会指定一个字符集的名字并添加进去。这将覆盖在文档体中通过 META 标签指定的字符集。AddDefaultCharset Off这样的设置将会禁用此功能。AddDefaultCharset On将根据此指令的需要启用Apache内部的默认字符集——iso-8859-1。

因为 MT 的模板机制控制的非常好.每个页面都有指定字符集的Meta 标签。所以这样带来了最大的灵活性。Google搜索了一下,看到有的的经验是指定 AddDefaultCharset gb2312 .这样扩展性就不够好。一些其他字符集的页面就会给读者带来阅读障碍。其实这个问题在我第一次用MT的时候也遇到过,当时歪打正着,糊里糊涂的没注意这个细节。当然,对 http 的机制如果再熟悉一些可能就会直接定位了。

再次谢谢车东的提示!


One thought on “MT UTF-8 显示的问题

Leave a Reply

Your email address will not be published. Required fields are marked *