阳光网驿-企业信息化交流平台【DTC零售连锁全渠道解决方案】

 找回密码
 注册

QQ登录

只需一步,快速开始

扫描二维码登录本站

手机号码,快捷登录

老司机
查看: 1248|回复: 0

[转帖] UCenter与Discuz编码不统一的兼容处理方法

[复制链接]
  • TA的每日心情
    开心
    2021-8-30 00:00
  • 签到天数: 35 天

    [LV.5]常住居民I

    发表于 2016-7-21 13:13:53 | 显示全部楼层 |阅读模式
      案例: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);

    }
    楼主热帖
    启用邀请码注册,提高发帖质量,建设交流社区
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

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