今天下载了一个discuzX3.2 GBK编码版本安装,发现居然出现了乱码。N多年前,倒是对乱码这个问题比较熟悉。那时使用的是apache 2.2,默认httpd.conf中有一项AddDefaultCharset是UTF-8,但现在令人奇了怪了的是,我使用的是NGINX。居然也出现了乱码。
由于我的环境是NGINX / apache 2.4 可自由切换,因此,我还是尝试了一下切换到apache 2.4,发现仍然是乱码。
检查apache的 httpd.conf文件,居然也没有发现有 AddDefaultCharset该项参数。
于是尝试自己添加这个参数并设置为 OFF,重启了web。结果还是一样,没有解决这个问题。
查阅相关资料,众说纷纭,各执一词。
由于手头还有一个主机,使用的是也是APACHE 2.4,但是php版本比较低,是用的php5.3,印象中好像在那台主机上安装过DZ,并没有发现有乱码的现象。于是猜想,会不会是php版本的原因,因为当前这台主机的PHP版本是 5.6
于是再次借助搜索引擎,终于找到了原因。
原来在php5.4.0后, The default value for the encoding parameter was changed to UTF-8.
也就是说,php中本身也有编码这么个东西。而在php5.4.0后,默认的编码参数被更改到了UTF-8,而在更早版本中,参数是OFF,即自适应状态。
既然知道原因就好解决了。直接在php.ini的[PHP]标签下修改或增加 default_charset = Off 并重启WEB环境就可以了。
例如我使用的是amh
解决方法
sed -i -e '/[PHP]/a\default_charset = Off' /etc/php.ini /etc/init.d/amh-start
完成后,再次测试,发现已经不再是乱码。
切换回nginx,再次测试,发现也没有再乱码。
总结:
GBK出现乱码,不一定是web引擎的原因,也可能是php版本的原因。因此,如果有以下这些情况,可能就需要多方考虑了。例如: