dedecms和114la在国外空间乱码

时间: 2022-11-10 / 分类: dedecms / 浏览次数: 271 views / 0个评论 发表评论

老客户的站点又乱码了,应该是他自己换了空间或者服务器升级了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”); //数据库编码格式

 

发表评论

您的昵称 *

您的邮箱 *

您的网站