之前dz是gbk的,所以ucenter也是gbk的,今天跟另一个网站整合的时候死活登录不上去,开始以为是整合失败了。找问题,查key,然后测试注册了一个,意料之外的居然成功了,去uc用户中心去的时候才发现用户名是乱码的,于是才意识到这次需要整合的网站是utf8的。
找到问题的源头就好解决了,网上找了一下资料,结果各种说不可能解决,或者说什么必须转码什么的,我有几个网站,转码毕竟不正常,然后尝试了下使用php的iconv()试试传输的时候转码,居然奇迹般的成功了!哈哈~下面贴出需要修改的代码。
以下是需要整合的网站为utf8编码,ucenter为gbk编码
在中找到uc_client/client.php,找出对应位置代码,修改为
[code]
// 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);  
}
[/code]
            
转载请注明:七彩悠悠博客 | 心悠悠 情悠悠 » UCenter与不同编码的网站,解决乱码问题