UCENTER编码与DEDECMS编码不一致及DEDECMS免激活
发布:smiling 来源: PHP粉丝网 添加日期:2015-03-18 10:49:50 浏览: 评论:0
第一个问题:完美解决UCENTER编码与DEDECMS编码不一致
以DEDECMS5.6 UTF8 与UCENTER Gbk 和UCHOME GBK 为例,先在后台安装DEDECMS5.6 UTF8 安装UCENTER 模块,打开管理目录下的api_center.php.
第一步:删除安装UC插件提示“uc服务端编码与DedeCMS编码不一致!要求您的uc服务端编码为:gbk编码.”并且对传递的网站名称,标签模板标记说明:UTF8转GBK
查找PHP代码:
- elseif($ucdbcharset != 'gbk')
- {
- ShowMsg('uc服务端编码与DedeCMS编码不一致!要求您的uc服务端编码为:gbk编码.',-1);
- exit();
- }
- //标签应用模板
- $app_tagtemplates = 'apptagtemplates[template]='.urlencode('{title}').'&'. //开源软件:phpfensi.com
- 'apptagtemplates[fields][title]='.urlencode('标题').'&'.
- 'apptagtemplates[fields][writer]='.urlencode('作者').'&'.
- 'apptagtemplates[fields][pubdate]='.urlencode('时间').'&'.
- 'apptagtemplates[fields][url]='.urlencode('地址');
- $postdata = 'm=app&a=add&ucfounder=&ucfounderpw='.urlencode($uc_setings['authkey']).'&apptype=OTHER&appname='.urlencode($GLOBALS['cfg_webname']).'&appurl='.urlencode($GLOBALS['cfg_basehost']).'&appip=&appcharset=gbk&appdbcharset=gbk&'.$app_tagtemplates.'&release='.UC_CLIENT_RELEASE;
- //修改为:
- //elseif($ucdbcharset != 'gbk')
- //{
- // ShowMsg('uc服务端编码与DedeCMS编码不一致!要求您的uc服务端编码为:gbk编码.',-1);
- // exit();
- //}
- //标签应用模板
- $app_tagtemplates = 'apptagtemplates[template]='.urlencode('{title}').'&'.
- 'apptagtemplates[fields][title]='.urlencode(utf82gb('标题')).'&'.
- 'apptagtemplates[fields][writer]='.urlencode(utf82gb('作者')).'&'.
- 'apptagtemplates[fields][pubdate]='.urlencode(utf82gb('时间')).'&'.
- 'apptagtemplates[fields][url]='.urlencode(utf82gb('地址'));
- $postdata = 'm=app&a=add&ucfounder=&ucfounderpw='.urlencode($uc_setings['authkey']).'&apptype=OTHER&appname='.urlencode(utf82gb($GLOBALS['cfg_webname'])).'&appurl='.urlencode($GLOBALS['cfg_basehost']).'&appip=&appcharset=gbk&appdbcharset=gbk&'.$app_tagtemplates.'&release='.UC_CLIENT_RELEASE;
完成上面这一步就可以开始配置UCENTER模块了.(略)
第二步:解决在UCENTER HOME GBK 或其他GBK 版本注册中文用户名在DEDECMS乱码问题。
打开api/uc.php,查找PHP代码:
- function synlogin($get, $post)
- {
- $uid = $get['uid'];
- $username = $get['username'];
- //修改为(对UC里的中文用户名从GBK转换成UTF8)
- function synlogin($get, $post)
- {
- $uid = $get['uid'];
- $username = gb2utf8($get['username']);
这样可以解决中文用户名乱码的问题,但是还有一个很严重的问题,后台所有关于数据库方面的都乱码,个人以为是每次使用API的时候,DEDECMS都延续了UCenter的MYSQL采用的编码.
所有我们要再每次API调用后再指定DEDECMS的采用的编码,PHP代码如下:
mysql_query("SET NAMES 'utf8'");
同步登陆同步登出相关最重要的是:include/memberlogin.class.php 打开它,查找PHP 代码:
- #api{{
- if(defined('UC_API') && @include_once DEDEROOT.'/uc_client/client.php')
- {
- if($data = uc_get_user($this->fields['userid']))
- {
- if(uc_check_avatar($data[0]) && !strstr($this->fields['face'],UC_API))
- {
- $this->fields['face'] = UC_API.'/avatar.php?uid='.$data[0].'&size=middle';
- $dsql->ExecuteNoneQuery("UPDATE `dede_member` SET `face`='".$this->fields['face']."' WHERE `mid`='{$this->M_ID}'");
- }
- }
- }
- #/aip}}
后面插入一行:
mysql_query("SET NAMES 'utf8'");
这样就可以解决从UCenter接收的中文乱码。
还有就是文章推送,短消息同步在保存到UCENTER的时候就必须转换成GBK编码。并且在API结束后再把默认MSYQL编码转换回DEDECMS默认编码。
你可以全目录查找一下代码:
#api{{
一般就是API调用开始,这个因为要修改的东西比较多,略过,高手应该可以举一反三,新手如果实在要搞,本人有偿帮你搞(QQ:780404).
第二个问题:DEDECMS免登陆激活同步登陆登出
比如在UCHOME注册后在UCHOME登陆一次后就不用再在DEDECMS登陆了,所以UCHOME注册成功后请修改代码设置注册成功后不保存COOKI不登陆个人空间而是跳到登陆页面。)。这样别人登陆UCHOME后再进入DEDECMS立马就同步了。
修改办法:打开api/uc.php,查找PHP代码:
- $result = $this->db->GetOne("SELECT mid,pwd FROM `dede_member` WHERE `userid` like '$username' AND matt<>10");
- if(is_array($result))
- {
- include_once DEDEINC.'/memberlogin.class.php';
- $cfg_ml = new MemberLogin(86400);
- $cfg_ml->PutLoginInfo($result['mid']);
- }
- //在下面插入以下代码:
- else
- {
- //如果没有激活,则自动添加该用户到数据库,并设置已激活状态的cookie
- //会员的默认金币
- $dfscores = 0;
- $dfmoney = 0;
- $dfrank = $this->db->GetOne("Select money,scores From `dede_arcrank` where rank='10' ");
- if(is_array($dfrank))
- {
- $dfmoney = $dfrank['money'];
- $dfscores = $dfrank['scores'];
- }
- $jointime = time();
- $logintime = time();
- $joinip = $get['regip'];
- $loginip = $get['regip'];
- $pwd = $get['password'];
- $spaceSta = ($cfg_mb_spacesta < 0 ? $cfg_mb_spacesta : 0);
- $mtype='个人';
- $email=$get['email'];
- $username=$username;
- $inQuery = "INSERT INTO `dede_member` (`mtype` ,`userid` ,`pwd` ,`uname` ,`sex` ,`rank` ,`money` ,`email` ,`scores` ,
- `matt`, `spacesta` ,`face`,`safequestion`,`safeanswer` ,`jointime` ,`joinip` ,`logintime` ,`loginip` )
- VALUES ('$mtype','$username','$pwd','$username','保密','10','$dfmoney','$email','$dfscores',
- '0','$spaceSta','','','','$jointime','$joinip','$logintime','$loginip'); ";
- if($this->db->ExecuteNoneQuery($inQuery))
- {
- $mid = $this->db->GetLastID();
- //写入默认会员详细资料
- $space='person';
- //写入默认统计数据
- $membertjquery = "INSERT INTO `dede_member_tj` (`mid`,`article`,`album`,`archives`,`homecount`,`pagecount`,`feedback`,`friend`,`stow`)
- VALUES ('$mid','0','0','0','0','0','0','0','0'); ";
- $this->db->ExecuteNoneQuery($membertjquery);
- //写入默认空间配置数据
- $spacequery = "Insert Into `dede_member_space`(`mid` ,`pagesize` ,`matt` ,`spacename` ,`spacelogo` ,`spacestyle`, `sign` ,`spacenews`)
- Values('$mid','10','0','$username的空间','','$space','',''); ";
- $this->db->ExecuteNoneQuery($spacequery);
- //写入其它默认数据
- $this->db->ExecuteNoneQuery("INSERT INTO `dede_member_flink`(mid,title,url) VALUES('$mid','织梦内容管理系统','http://www.dedecms.com'); ");
- include_once DEDEINC.'/membermodel.cls.php';
- $membermodel = new membermodel($mtype);
- $modid=$membermodel->modid;
- $modelform = $this->db->getOne("select * from dede_member_model where id='$modid' ");
- $this->db->ExecuteNoneQuery("INSERT INTO `{$membermodel->table}` (`mid`) VALUES ('$mid');");
- //----------------------------------------------
- //模拟登录
- //---------------------------
- include_once DEDEINC.'/memberlogin.class.php';
- $cfg_ml = new MemberLogin(86400);
- $cfg_ml->PutLoginInfo($mid);
- }
- }
第二个问题是对于任何编码都有效,不一定是要编码不一样的.
总结一下:
第一个问题:上面讲述的例子主要是DEDECMS是UTF8,UCenter是GBK,如果DEDECMS是GBK.UCENTER是GBK。那么是使用uft82gb函数的地方使用gb2uft8函数,使用gb2uft8函数的地方使用uft82gb函数,set nams 'utf8' 中的utf8改成GBK.
第二个问题:所有编码通用.
Tags: UCENTER编码 DEDECMS编码
- 上一篇:Dedecms备份还原的三个方法
- 下一篇:dedecms搬家流程
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)