我踩过的坑,希望你别掉进来。

云服务需要和UCENTER做对接,一个php,一个Java,幸好有了discuz_ucenter_api_for_java,帮我解决了大部分问题,为什么是大部分问题,因为他没有解决中文登录,中文同步登录的问题,我对编码这块完全不懂,搞了一下午脑袋晕晕的,幸好公司的phper全力配合我。终于解决了这个问题,思路是什么:就是php和Java的字符串一个一个的对。直接说解决方法吧

1:替换base64编码,

作者不知道在哪找的一个base64的编码实现,我删除了使用了commons-codec库里面的base64实现。修改PHPFunctions这个类

    protected String base64_decode(String input){
try {
return new String(base64.decode(input), "iso8859-1");
} catch (Exception e) {
return e.getMessage();
}
} protected String base64_encode(String input){
try {
return new String(base64.encode(input.getBytes("iso-8859-1")));
//return new String(base64.encode(input.getBytes("UTF-8")),"iso8859-1");
} catch (Exception e) {
return e.getMessage();
}
}

为什么是iso-8859-1,这个我分析不是tomcat的问题,是ucenter使用了iso-8859-1,我看了ucenter的返回值,是个xml的字符串,编码是iso-8859-1.

2: 实现中文登录的问题。修改两个地方:

1:PHPFunctions类的urlencode方法

    protected String urlencode(String value){
try {
return URLEncoder.encode(value, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}

2:Client的uc_fopen方法

BufferedReader reader = new BufferedReader(new InputStreamReader(ins,"UTF-8"));

3:实现中文的同步登录:

修改Clent的uc_authcode方法。

        if($operation.equals("DECODE")) {
String $result = $result1.substring(0, $result1.length());
String temp=substr($result.toString(), 26);
try {
temp=new String(temp.getBytes("iso8859-1"),"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
if((Integer.parseInt(substr($result.toString(), 0, 10)) == 0 || Long.parseLong(substr($result.toString(), 0, 10)) - time() > 0) &&
substr($result.toString(), 10, 16).equals( substr(md5(temp+ $keyb), 0, 16))) {
return temp;
} else {
return "";
}
} else {
return $keyc+base64_encode($result1.toString()).replaceAll("=", "");
}

最新文章

  1. Core Java 总结(关键字,特性问题)
  2. Masonry使用注意事项
  3. css 选择器优先级
  4. U盘容量变小的处理方式
  5. [转]Hide or Remove jquery ui tab based on condition
  6. [转][Unreal3教程]引擎使用操作入门教程
  7. Linux下修改Oracle监听地址
  8. [JS]_proto_和prototype到底有啥区别
  9. PHP怎么实现网站中,同一个用户不能同时在线?
  10. struts2 taglib struts标签学习整理中
  11. Cocos2d-x 的“HelloWorld” 深入分析
  12. SQLServer之创建Transact-SQL DDL触发器
  13. 第十九节、基于传统图像处理的目标检测与识别(词袋模型BOW+SVM附代码)
  14. 每月IT摘录201904
  15. graph_base_pic_segmentation里面的细节和代码
  16. 在Asp.Net MVC中使用Repeater控件
  17. linux系统编程:自己动手写一个cp命令
  18. (FFT)A+B Problem
  19. sqlserver修改主机名
  20. ios 给图片加文字

热门文章

  1. 网络爬虫必备知识之concurrent.futures库
  2. python 编码拓展,小数据池,
  3. MySQL自带的性能压力测试工具mysqlslap详解
  4. 机器学习:scikit-learn 文档、深入学习机器学习的思路
  5. RabbitMQ 四种Exchange
  6. Maven的Snapshot版本与Release版本
  7. Rails的静态资源管理(五)—— 自定义 Asset Pipeline
  8. [Codeforces]#179 div1-----295ABCDE
  9. springmvc下的省市县三级联动
  10. 部署和调优 1.1 nfs部署和优化-2