当前位置:首页 > CMS教程 > DeDecms > 列表

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代码:

  1. elseif($ucdbcharset != 'gbk')    
  2.             {    
  3.                 ShowMsg('uc服务端编码与DedeCMS编码不一致!要求您的uc服务端编码为:gbk编码.',-1);    
  4.                 exit();     
  5.             }    
  6.             //标签应用模板    
  7.             $app_tagtemplates = 'apptagtemplates[template]='.urlencode('{title}').'&'.  //开源软件:phpfensi.com 
  8.             'apptagtemplates[fields][title]='.urlencode('标题').'&'.    
  9.             'apptagtemplates[fields][writer]='.urlencode('作者').'&'.    
  10.             'apptagtemplates[fields][pubdate]='.urlencode('时间').'&'.    
  11.             'apptagtemplates[fields][url]='.urlencode('地址');    
  12.                 
  13.             $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;   
  14.  
  15.  
  16. //修改为: 
  17.  
  18. //elseif($ucdbcharset != 'gbk')    
  19.             //{    
  20.             //  ShowMsg('uc服务端编码与DedeCMS编码不一致!要求您的uc服务端编码为:gbk编码.',-1);    
  21.             //  exit();     
  22.             //}    
  23.             //标签应用模板    
  24.             $app_tagtemplates = 'apptagtemplates[template]='.urlencode('{title}').'&'.    
  25.             'apptagtemplates[fields][title]='.urlencode(utf82gb('标题')).'&'.    
  26.             'apptagtemplates[fields][writer]='.urlencode(utf82gb('作者')).'&'.    
  27.             'apptagtemplates[fields][pubdate]='.urlencode(utf82gb('时间')).'&'.    
  28.             'apptagtemplates[fields][url]='.urlencode(utf82gb('地址'));    
  29.                 
  30.             $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代码:

  1. function synlogin($get$post)    
  2.     {    
  3.         $uid = $get['uid'];    
  4.         $username = $get['username'];   
  5.  
  6. //修改为(对UC里的中文用户名从GBK转换成UTF8) 
  7. function synlogin($get$post)    
  8.     {    
  9.         $uid = $get['uid'];    
  10.         $username = gb2utf8($get['username']); 

这样可以解决中文用户名乱码的问题,但是还有一个很严重的问题,后台所有关于数据库方面的都乱码,个人以为是每次使用API的时候,DEDECMS都延续了UCenter的MYSQL采用的编码.

所有我们要再每次API调用后再指定DEDECMS的采用的编码,PHP代码如下:

mysql_query("SET NAMES 'utf8'");  

同步登陆同步登出相关最重要的是:include/memberlogin.class.php 打开它,查找PHP 代码:

  1. #api{{    
  2.                 if(defined('UC_API') && @include_once DEDEROOT.'/uc_client/client.php')    
  3.                 {    
  4.                     if($data = uc_get_user($this->fields['userid']))    
  5.                     {    
  6.                         if(uc_check_avatar($data[0]) && !strstr($this->fields['face'],UC_API))    
  7.                         {    
  8.                             $this->fields['face'] = UC_API.'/avatar.php?uid='.$data[0].'&size=middle';    
  9.                             $dsql->ExecuteNoneQuery("UPDATE `dede_member` SET `face`='".$this->fields['face']."' WHERE `mid`='{$this->M_ID}'");    
  10.                         }    
  11.                     }    
  12.                 }    
  13.                 #/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代码:

  1. $result = $this->db->GetOne("SELECT mid,pwd FROM `dede_member` WHERE `userid` like '$username' AND matt<>10");    
  2.         if(is_array($result))    
  3.         {    
  4.    
  5.             include_once DEDEINC.'/memberlogin.class.php';    
  6.             $cfg_ml = new MemberLogin(86400);    
  7.             $cfg_ml->PutLoginInfo($result['mid']);    
  8.         }   
  9.  
  10. //在下面插入以下代码: 
  11.  
  12.     else   
  13.         {    
  14. //如果没有激活,则自动添加该用户到数据库,并设置已激活状态的cookie    
  15.             //会员的默认金币    
  16.             $dfscores = 0;    
  17.             $dfmoney = 0;    
  18.             $dfrank = $this->db->GetOne("Select money,scores From `dede_arcrank` where rank='10' ");    
  19.             if(is_array($dfrank))    
  20.             {    
  21.                 $dfmoney = $dfrank['money'];    
  22.                 $dfscores = $dfrank['scores'];    
  23.             }    
  24.             $jointime = time();    
  25.             $logintime = time();    
  26.             $joinip = $get['regip'];    
  27.             $loginip = $get['regip'];    
  28.             $pwd = $get['password'];    
  29.                 
  30.             $spaceSta = ($cfg_mb_spacesta < 0 ? $cfg_mb_spacesta : 0);    
  31.             $mtype='个人';    
  32.             $email=$get['email'];    
  33.             $username=$username;    
  34.             $inQuery = "INSERT INTO `dede_member` (`mtype` ,`userid` ,`pwd` ,`uname` ,`sex` ,`rank` ,`money` ,`email` ,`scores` , 
  35.             `matt`, `spacesta` ,`face`,`safequestion`,`safeanswer` ,`jointime` ,`joinip` ,`logintime` ,`loginip` )   
  36.            VALUES ('$mtype','$username','$pwd','$username','保密','10','$dfmoney','$email','$dfscores',   
  37.            '0','$spaceSta','','','','$jointime','$joinip','$logintime','$loginip'); ";    
  38.                 
  39.             if($this->db->ExecuteNoneQuery($inQuery))    
  40.             {                   
  41.                 $mid = $this->db->GetLastID();    
  42.             
  43.                 //写入默认会员详细资料    
  44.                 $space='person';    
  45.             
  46.                 //写入默认统计数据    
  47.                 $membertjquery = "INSERT INTO `dede_member_tj` (`mid`,`article`,`album`,`archives`,`homecount`,`pagecount`,`feedback`,`friend`,`stow`) 
  48.                        VALUES ('$mid','0','0','0','0','0','0','0','0'); ";    
  49.                 $this->db->ExecuteNoneQuery($membertjquery);    
  50.             
  51.                 //写入默认空间配置数据    
  52.                 $spacequery = "Insert Into `dede_member_space`(`mid` ,`pagesize` ,`matt` ,`spacename` ,`spacelogo` ,`spacestyle`, `sign` ,`spacenews`) 
  53.                         Values('$mid','10','0','$username的空间','','$space','',''); ";    
  54.                 $this->db->ExecuteNoneQuery($spacequery);    
  55.             
  56.                 //写入其它默认数据    
  57.                 $this->db->ExecuteNoneQuery("INSERT INTO `dede_member_flink`(mid,title,url) VALUES('$mid','织梦内容管理系统','http://www.dedecms.com'); ");    
  58.                     
  59.                 include_once DEDEINC.'/membermodel.cls.php';        
  60.                     
  61.                 $membermodel = new membermodel($mtype);    
  62.                     
  63.                 $modid=$membermodel->modid;    
  64.                         
  65.                 $modelform = $this->db->getOne("select * from dede_member_model where id='$modid' ");    
  66.                     
  67.                 $this->db->ExecuteNoneQuery("INSERT INTO `{$membermodel->table}` (`mid`) VALUES ('$mid');");    
  68.                                     
  69.                 //----------------------------------------------    
  70.                 //模拟登录    
  71.                 //---------------------------    
  72.    
  73.                 include_once DEDEINC.'/memberlogin.class.php';    
  74.                     $cfg_ml = new MemberLogin(86400);    
  75.                 $cfg_ml->PutLoginInfo($mid);                    
  76.                     
  77.             }    
  78.         }   

第二个问题是对于任何编码都有效,不一定是要编码不一样的.

总结一下:

第一个问题:上面讲述的例子主要是DEDECMS是UTF8,UCenter是GBK,如果DEDECMS是GBK.UCENTER是GBK。那么是使用uft82gb函数的地方使用gb2uft8函数,使用gb2uft8函数的地方使用uft82gb函数,set nams 'utf8' 中的utf8改成GBK.

第二个问题:所有编码通用.

Tags: UCENTER编码 DEDECMS编码

分享到: