默认编码导致的DEDECMS乱码
分类:网站技术日期:2015-07-31 - 9:17:10作者:老谢
一个客户的dedecms乱码,各种检查无果,诡异的是文件的编码以及head里面的meta的编码都是正确的,把生成的HTML下载到本地打开,也都是正常的,一放到服务器就乱码。
经过更为细致的检查,发现客户在根目录下的.htaccess里面配置了AddDefaultCharset UTF-8,这样就会导致apache默认使用utf-8编码向浏览器发送数据,客户的dedecms是GBK编码,所以自然就乱码了,另外表示真是第一次在有客户在.htaccess里面配置这个。。。下面放一段google到的文字:
首先,可以使用AddDefaultCharset off来关闭默认文件编码,这样apache服务器就不会在http应答消息头部设置charset,只是设置Content-type: text/html. 而浏览器就会依靠html文件中设置的harset来决定编码。
其次,脚本php.ini文件中的default_charset = “UTF-8″作用同httpd.conf文件,把该行注释掉,使php自动识别文件的编码方式。
这样不论你用什么编码方式,只要test.php中的meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″ 与你test.php文件编码方式相同,就不会产生乱码问题。用户提交数据的编码浏览器提交的字符编码由客户端的characher encoding决定。
例如,当前浏览器的编码是Gb2312,用户提交数据后,无论apache设置的编码方式是GB2312还是UTF-8,这时在服务器端接收到的仍是以Gb2312编码的数据。
如果要在返回页面上显示用户刚才提交的数据,而该页面是用UTF-8编码的或者要在数据库中存储的用户提交的数据,而数据库是UTF-8编码的,那就要做字符转换了。
这种问题很少遇到,基本上程序指定了编码,.htaccess不去设置就不会出现,WIN的主机一般没有这个问题
是的,很少有人去.htaccess设这个参数
经常做网站搬家,或者套用模板可能会出现这种情况吧?
技术牛啊
为毛你连头像都没了
被你这么一说,解决大问题了。。。
我是nginx设置了编码。。。
root@kn007:~APP_nginx/conf
> grep ‘UTF’ *
vhost/awstats.conf:13: charset UTF-8;
妈蛋,我说awstats为什么老乱码,明明声明了编码是GBK,刚刚看了下nginx的conf,不知当时为何脑残加了这句编码声明。
这种不常见的配置导致的问题检查起来总是很麻烦 Orz…