IT分享网

搜索
热搜: 活动 交友 discuz
查看: 754|回复: 0

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

[复制链接]
发表于 2017-1-20 15:35:28 | 显示全部楼层 |阅读模式
之前在弄ecshop的时候,发现UC通讯成功但是无法登陆,找了半天原因是中文的用户无法登陆,而英文的可以。网上没有解决方案,这里自己研究了下,提供给大家。
首先问题出在了编码上,我的discuz是GBK自然UC_Server也是GBK,而ecshop是UTF8,这导致双方通讯的中文会变成乱码,解决方法是,将所有UTF-8的提交的传输,都强制改成GBK。
修改文件为:uc_client下的client.php
  • 找到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); }
  • 搜索所有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);

另外方法:
  • 打开PHP.ini文件

  • 2
    default_charset = "GB2312"

  • 3
    保存PHP.ini文件



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2019-8-18 07:11 , Processed in 0.390563 second(s), 28 queries .

  

QQ|Archiver|手机版|小黑屋|IT分享网 ( 苏ICP备15049123号-2 )  

GMT+8, 2019-8-18 07:11 , Processed in 0.390563 second(s), 28 queries .

Powered by Discuz! X3.2 Designed by 999test.cn

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表