以梦为马,不负韶华

搜索
查看: 1205|回复: 1
收起左侧

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

[复制链接]
发表于 1970-1-1 08:00:00 显示全部楼层 |阅读模式
案例:

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函数为如下:
  1. // edit by mahoupao
  2. function uc_api_post($module, $action, $arg = array()) {
  3.     $s = $sep = '';
  4.     foreach($arg as $k => $v) {
  5.         // 强制转换编码方式为gb2312,以兼容通行证
  6.         $k=iconv( "UTF-8", "gb2312",$k);
  7.         $k = urlencode($k);
  8.         if(is_array($v)) {
  9.             $s2 = $sep2 = '';
  10.             foreach($v as $k2 => $v2) {
  11.                 // 强制转换编码方式为gb2312,以兼容通行证
  12.                 $k2=iconv( "UTF-8", "gb2312",$k2);
  13.                 $k2 = urlencode($k2);
  14.                 // 强制转换编码方式为gb2312,以兼容通行证
  15.                 $tmp=iconv( "UTF-8", "gb2312",uc_stripslashes($v2));
  16.                 $s2 .= "$sep2{$k}[$k2]=".urlencode($tmp);
  17.                 $sep2 = '&';
  18.             }
  19.             $s .= $sep.$s2;
  20.         } else {
  21.             // 强制转换编码方式为gb2312,以兼容通行证
  22.             $v=iconv( "UTF-8", "gb2312",uc_stripslashes($v));

  23.             $s .= "$sep$k=".urlencode($v);
  24.         }
  25.         $sep = '&';
  26.     }
  27.     $postdata = uc_api_requestdata($module, $action, $s);
  28.    
  29.     $result=uc_fopen2(UC_API.'/index.php', 500000, $postdata, '', TRUE, UC_IP, 20);
  30.     // 强制转换编码方式为utf-8,以兼容论坛
  31.     return iconv( "gb2312", "UTF-8",$result);
复制代码






发表于 1970-1-1 08:00:00 显示全部楼层
谢谢楼主分享!!!
回复 支持 反对

使用道具 举报

懒得打字嘛,点击右侧快捷回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|以梦为马,不负韶华

GMT+8, 2025-1-8 02:49

Powered by 以梦为马,不负韶华

© 2024-2099 Meng.Horse

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