dedecms和114la在国外空间乱码
老客户的站点又乱码了,应该是他自己换了空间或者服务器升级了MYSQL数据库
他的站使用的是ll4拉的导航程序和dede
我进去看了一下设置,他的站使用的是CP面板,登录后找到下面这个
从这里进去就可以看PHP版本
Php版本是5.6,然后进phpmyadmin看看数据库信息
默认字符集又换了,变成了latin1,我记得老外很多服务器默认都是utf-8的,唯独这个怎么换回去了(很久以前的老版本的mysql默认是latin1),知道问题在哪就好办了,根据原来的办法修改数据库连接就行了
http://blog.imxh.com/archives/3285 这个是我以前记录的,照葫芦画瓢就行了
114la主要是要修改这个文件\admin\applications\app_db.php
大概36行
self::$$link = @mysql_pconnect($host, $GLOBALS[‘database’][‘db_user’], $GLOBALS[‘database’][‘db_pass’]);
的后面加两句
mysql_query(“SET names latin1”, self::$$link);//数据库编码格式
mysql_set_charset(“gbk”,self::$$link);//设置默认客户端字符集
即可
原来我是想加在下面的if (mysql_get_server_info() > ‘4.1’)里面的,我试过不起作用,后来才发现是mysql_get_server_info()貌似返回的是数据库版本的字符串,貌似不能直接比较,结果那个判断就不起作用,其实现在的数据库早就超过4版本N久了,我觉得没必要再做这么个判断了
然后dede的数据库操作函数有2个文件,\include\里的dedesql.class.php和dedesqli.class.php
具体可以找cfg_mysql_type这个参数,一般在数据库dede_sysconfig表里面,可以在phpmyadmin里面查看
客户安装的时候是使用这个的mysqli
网上的资料说:mysqli连接是永久连接,而mysql是非永久连接
打开dedesqli.class.php,找到大概129行,去掉刚才说的那个没用的
$serverinfo = mysqli_get_server_info($this->linkID);这行
然后下面一行的判断可以去掉$serverinfo > ‘4.1’ &&
个人觉得现在的版本都已经是10了,谁还会用那么老的4版本
解释下这个东西:MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,说白了,MySQL要收费,MariaDB免费,使用上没区别
回到刚才的文件中约132行,去掉这行
mysqli_query($this->linkID, “SET character_set_connection=” . $GLOBALS[‘cfg_db_language’] . “,character_set_results=” . $GLOBALS[‘cfg_db_language’] . “,character_set_client=binary”);
换上我们自己的代码
mysqli_query($this->linkID,”set names “. $GLOBALS[‘cfg_db_language’]); //数据库编码格式
mysqli_set_charset($this->linkID,”gbk”);//设置默认客户端字符集
里面有个参数$GLOBALS[‘cfg_db_language’]是在/data/common.inc.php里面的
$cfg_db_language = ‘gbk’;改成$cfg_db_language = ‘latin1’;
因为数据库默认字符集是latin1,当然如果想少改个文件,直接在dedesqli.class.php里面写死也可以
mysqli_query($this->linkID,”set names “. $GLOBALS[‘cfg_db_language’]); //数据库编码格式
直接写成
mysqli_query($this->linkID,”set names latin1”); //数据库编码格式