记一次处理java请求PHP参数输出是问号

周末   群里提了一个问题  提示我的接口报错,提示的用户名有问题,这个是内部使用的按理来说不应该出现这个问题,我和我同事就怀疑是不是编码问题

然后我这边输出他给我传的信息   发现用户名是汉字的时候  我获取是???占位符

页面设置  header("Content-type:text/html;charset=utf-8");

然后就我这边打印参数编码

检测当前编码: $encode = mb_detect_encoding($operatereason, array("ASCII", "UTF-8", "GB2312", "GBK", "BIG5"));

查看发现 他给我传的是  EUC-CN

这里看一下 EUC-CN

EUC-CN是gb2312编码的一种表示方法。

然后我俩讨论编码的问题

然后他那边中文最后是给我传了一个Unicode编码

然后我这边 转一下

$name = preg_replace_callback("#\\\u([0-9a-f]{4})#i", function($matches){

    return iconv('UCS-2BE', 'UTF-8', pack('H4', $matches[1]));

}, $name);

这个时候  显示的就是中文了

附录1

php转换字符编码为utf-8

string iconv ( string incharset,stringincharset,stringout_charset , string $str )

将字符串 str 从 in_charset 转换编码到 out_charset。

function strToUtf8($str){

    $encode = mb_detect_encoding($str, array("ASCII",'UTF-8',"GB2312","GBK",'BIG5'));

    if($encode == 'UTF-8'){

        return $str;

    }else{

        return mb_convert_encoding($str, 'UTF-8', $encode);

    }

}

附录2

PHP json_decode中文转义的问题

默认情况下PHP的 json_decode 方法会把特殊字符进行转义,还会把中文转为Unicode编码形式。在有些情况下不希望进行这种转义。

对于PHP5.4+版本,json_decode函数第二个参数,可以用来限制转义范围。要限制中文,使用JSON_UNESCAPED_UNICODE参数。

json_encode($a, JSON_UNESCAPED_UNICODE);

对于PHP5.3及以前版本,可以用如下方式转回中文:

$originstr = '{"name":"张三"}';

$jsonobject = json_decode($originstr);

// badstr: {"name":"\u5f20\u4e09"}

$badstr = json_encode($jsonobject);

// goodstr: {"name":"张三"}

$goodstr = preg_replace_callback("#\\\u([0-9a-f]{4})#i", function($matches){

                               return iconv('UCS-2', 'UTF-8', pack('H4', $matches[1]));

                      }, $badstr);

附录3

json_encode、json_decode的中文乱码问题?

https://blog.csdn.net/changfangyuansh/article/details/100564351

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunsijia21983

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值