Ucenter的UClinet和UC_Server编码不一致无法登陆解决方法

之前在弄ecshop的时候,发现UC通讯成功但是无法登陆,找了半天原因是中文的用户无法登陆,而英文的可以。网上没有解决方案,这里自己研究了下,提供给大家。

首先问题出在了编码上,我的discuz是GBK自然UC_Server也是GBK,而ecshop是UTF8,这导致双方通讯的中文会变成乱码,解决方法是,将所有UTF-8的提交的传输,都强制改成GBK。

修改文件为:uc_client下的client.php

  1. 找到uc_api_post,替换成:
    function uc_api_post($module, $action, $arg = array()) { $s = $sep = ''; foreach($arg as $k => $v) { // 强制转换编码方式为GBK,以兼容通行证 $k=iconv( "UTF-8", "GBK",$k); $k = urlencode($k); if(is_array($v)) { $s2 = $sep2 = ''; foreach($v as $k2 => $v2) { // 强制转换编码方式为GBK,以兼容通行证 $k2=iconv( "UTF-8", "GBK",$k2); $k2 = urlencode($k2); // 强制转换编码方式为GBK,以兼容通行证 $tmp=iconv( "UTF-8", "GBK",uc_stripslashes($v2)); $s2 .= "$sep2{$k}[$k2]=".urlencode($tmp); $sep2 = '&'; } $s .= $sep.$s2; } else { // 强制转换编码方式为GBK,以兼容通行证 $v=iconv( "UTF-8", "GBK",uc_stripslashes($v));$s .= "$sep$k=".urlencode($v); } $sep = '&'; } $postdata = uc_api_requestdata($module, $action, $s);$result=uc_fopen2(UC_API.'/index.php', 500000, $postdata, '', TRUE, UC_IP, 20); // 强制转换编码方式为utf-8,以兼容现有网站 return iconv( "GBK", "UTF-8",$result); }
  2. 搜索所有username的function,在第一行增加$username = iconv( “UTF-8”, “GBK”,$username);

    需要注意的是,有个地方有oldname和newname,只是给修改用户名用的,我把这个程序阉割了,所以没改,有需求的记得改下

 

*****************************11.30.2016更新*************************

经过以上修改,依旧存在一个问题,在同步登陆,或者使用中文在UTF-8登陆的时候,用户名会显示为空,

问题出在了,当uc返回用户名的时候,是GBK,需要将其转化为UTF-8才能存入数据库,修改方法如下:

/includes/modules/integrates/ucenter.php

找到function login($username, $password, $remember = NULL)

在$uname = addslashes($uname); 下面增加

$uname = iconv( "GBK", "UTF-8",$uname);

喜欢的话订阅一个呗~第一时间收到文章更新哟~

发表评论

电子邮件地址不会被公开。