Archive for November 17th, 2003

Apache 中文乱码解决方案

Monday, November 17th, 2003

服务器端:
======
修改httpd.conf (在Redhat中放置的位置为/etc/httpd/conf/)
查找:
AddDefaultCharset ISO-8859-1
改成:
#AddDefaultCharset ISO-8859-1
AddDefaultCharset off
这种方式关掉了服务器的默认语言的发送,这样仅凭html文件头中设置的语言来决定网页语言。
很多文章都说通过修改为 AddDefaultCharset GB2312 把缺省语言改成GB2312来解决中文乱码,确实GB2312内码的网页可以正常显示了,但这并非万全之策。因为当你的网页内码不是GB2312,就算你在网页用下面的meta指定了正确的语言,如ISO8859-1,也不会解码为ISO8859-1,因为Apache已经先你一步将GB2312指定为网页的语言了,如下图:

而这个是加了 AddDefaultCharset off 后的:

修改后请重新启动Apache,在Redhat中命令为
/etc/init.d/httpd restart
当使用一些网页脚本引擎,如PHP,还可能需要修改相应的配置文件。
以PHP为例,需要修改php.ini (Red Hat中位置在/etc/)
找到:
default_charset = “iso-8859-1″ 或者类似的,如 default_charset = “gb2312″,将其注释掉:
;default_charset=”iso-8859-1″
客户端:
=====
在中文网页请中依情况在标签中添加:
GB2312:
<META http-equiv=”Content-Type” content=”text/html; charset=gb2312″ />
BIG5:
<META http-equiv=”Content-Type” content=”text/html; charset=big5″ />
UTF-8: (注意是UTF-8,而不是UTF8,我已经上过当了)
<META http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
如果还是不正常,请清空浏览器的Cache试试。
另外附上goghs的”blog工具中中文的问题“一文的修正版,这篇文章很好的阐述了Charset和Encoding之间的关系。

blog工具中中文的问题 [Blog] – goghs @ 23:26:56
现在的blog工具完全中文的并没有,而一般程序的默认,都是使用iso8859-1字符集,或者说en语言编码。字符集(Charset)和编码(Encoding)是两个不同的概念。
如果你使用MT的默认安装,或者使用B2的默认安装,你会发现你所发布的中文文章根本无法正常显示。(此处的MT的默认安装,以使用MySQL为基准,使用文件的我没有测试,不便评述。)
原因很简单,所有页面的默认都是iso8859-1字符集,所以在数据插入数据库的时候,都会被编码(成为html实体,如&#xxxx;类型,xxxx此处都是数字)。
处理的方式并不复杂,对MT而言,你需要将mt.cfg中的NoHTMLEntities以行前面的注释符号去掉,变成
NoHTMLEntities 1
一次来禁止使用HTML::Entities进行实体编码。
然后修改CGI.pm中的一处,设置为正确的gb2312字符集,我在前面的一篇文章中已经谈到。
并且需要修改所有的模板,将其中的charset从iso8859-1修改为gb2312。
而对B2,B2config.php里, 第91行有
# IMPORTANT! [...]