当前位置: 主页 > 日志 > 其它 >

UCenter与Discuz编码不统一的兼容处理方法

案例:

UCenter采用的字符编码是GBK,Discuz论坛A采用的编码是UTF-8,Discuz论坛B采用的编码方式是GBK。整合后问题如下:

在论坛A注册的中文用户名可以在论坛A登录,但无法在论坛B登录。英文及数字用户名不受影响。

分析:

论坛A采用的是UTF-8编码,它传递给UCenter的数据也是UTF-8的,所以添加到UCenter数据库的数据也是UTF-8的。在论坛B中以GBK方式读取这些数据时,就会出现问题。(在UCenter中看到这些数据均为乱码)

解决:

修改论坛A的UCenter接口,强制修改其发送给UCenter的数据编码方式为GBK,并强制返回的数据为UTF-8。

修改uc_client目录下的client.php文件中的uc_api_post函数为如下:


// edit by redice
function uc_api_post($module, $action, $arg = array()) {
    $s = $sep = '';
    foreach($arg as $k => $v) {
        // 强制转换编码方式为gb2312,以兼容通行证
        $k=iconv( "UTF-8", "gb2312",$k);
        $k = urlencode($k);
        if(is_array($v)) {
            $s2 = $sep2 = '';
            foreach($v as $k2 => $v2) {
                // 强制转换编码方式为gb2312,以兼容通行证
                $k2=iconv( "UTF-8", "gb2312",$k2);
                $k2 = urlencode($k2);
                // 强制转换编码方式为gb2312,以兼容通行证
                $tmp=iconv( "UTF-8", "gb2312",uc_stripslashes($v2));
                $s2 .= "$sep2{$k}[$k2]=".urlencode($tmp);
                $sep2 = '&';
            }
            $s .= $sep.$s2;
        } else {
            // 强制转换编码方式为gb2312,以兼容通行证
            $v=iconv( "UTF-8", "gb2312",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( "gb2312", "UTF-8",$result);
}

[日志信息]

该日志于 2010-10-13 11:50 由 redice 发表在 redice's Blog ,你除了可以发表评论外,还可以转载 “UCenter与Discuz编码不统一的兼容处理方法” 日志到你的网站或博客,但是请保留源地址及作者信息,谢谢!!    (尊重他人劳动,你我共同努力)
   
验证(必填):   点击我更换验证码

redice's Blog  is powered by DedeCms |  Theme by Monkeii.Lee |  网站地图 |  本服务器由西安鲲之鹏网络信息技术有限公司友情提供

返回顶部