使php的编码与java的编码保持一致

第一步:将字符串转换成十六进制

function String2Hex($string){
    $hex='';
    for ($i=0; $i < strlen($string); $i++){
        $hex .= "\u".dechex(ord($string[$i]));
    }
    return $hex;
}

第二步:让经过转换的字符串与java的编码保持一致

function unicode_decode($unistr, $encoding = 'UTF-8', $ishex = false, $prefix = '&#', $postfix = ';') {
    $arruni = explode($prefix, $unistr);
    $unistr = '';

    for($i = 1, $len = count($arruni); $i < $len; $i++) {
    if (strlen($postfix) > 0) {
        $arruni[$i] = substr($arruni[$i], 0, strlen($arruni[$i]) - strlen($postfix));
    }
    $temp = $ishex ? hexdec($arruni[$i]) : intval($arruni[$i]);
    $unistr .= ($temp < 256) ? chr(0) . chr($temp) : chr($temp / 256) . chr($temp % 256);
    }

    return iconv('UCS-2', $encoding, $unistr);
}

调用示例:

function make_sign($sign_str){
    $s = self::String2Hex($sign_str);
    //md5加密
    $md5_str  = md5(self::unicode_decode($s,'utf-8',true,'\u',''));
    return strtoupper( $md5_str );
}

需求原因:
在访问京东CPS链接转换的API时,他只适配java的 md5 加密,而php的编码和java不同,所以直接通过 md5 加密之后不能返回正确的数据,通过以上方法将php编码转换成java编码然后再加密,最终得到了正确的返回数据。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值