php 输出json utf8,JsonProtocal.php处理utf8编码的中文问题

@walkor Demo里面提供的JsonProtocal.php 在处理中文上有点问题

原因在于strlen并不能正确返回长度

例如:

$zhStr = '中文混合eng!';

echo strlen($zhStr); // 输出:18

要换成mb_strlen 我也是查手册才知道的

同理还有substr函数。要换成mb_substr

由于我不了解php 才看了一天而已。但是改成下面这样就能工作了。

老大你看下。是否要加更多的逻辑。

class JsonProtocol

{

// 根据首部四个字节(int)判断数据是否接收完毕

public static function check($buffer)

{

// 读取首部四个字节

$buffer_data = unpack('Ntotal_length', $buffer);

// 得到这次数据的整体长度(字节)

$total_length = $buffer_data;

// 已经收到的长度(字节)

$recv_length = mb_strlen($buffer,'utf-8');

if($total_length>$recv_length)

{

// 还有这么多字节要接收

return $total_length - $recv_length;

}

// 接收完毕

return 0;

}

// 打包

public static function encode($data)

{

// 选用json格式化数据

$buffer = json_encode($data);

// 包的整体长度为json长度加首部四个字节(首部数据包长度存储占用空间)

$total_length = 4 + mb_strlen($buffer,'utf-8');

return pack('N', $total_length) . $buffer;

}

// 解包

public static function decode($buffer)

{

echo $buffer;

$buffer_data = unpack('Ntotal_length', $buffer);

// 得到这次数据的整体长度(字节)

$total_length = $buffer_data;

echo $total_length;

// json的数据

$json_string = mb_substr($buffer, 4, $total_length-4, 'utf-8');

echo $json_string;

return json_decode($json_string, true);

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值