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);
看完了?留个评分呗?
[0人评了分,平均: 0/5]

本站原创文章皆遵循“署名-非商业性使用-相同方式共享 3.0 (CC BY-NC-SA 3.0)”。转载请保留以下标注:

原文来源:《Ucenter的UClinet和UC_Server编码不一致无法登陆解决方法》

发表评论

邮箱地址不会被公开。

返回顶部