解决 json 乱码问题

<?php class Json{ private static $os =null; public static function getOs(){ if(null===self::$os){ self::$os = substr(PHP_OS,0,3); } return self::$os; } public static function encode($str){ $code = json_encode($str); if('WIN'==self::getOs()){ $s_format = 'UCS-2'; } else { $s_format = 'UCS-2BE'; } return preg_replace("#///u([0-9a-f]+)#ie", "iconv('{$s_format}', 'UTF-8', pack('H4', '//1'))", $code); } public static function decode($str){ return json_decode($str); } } ?>

用上面的代码可以解决在存储JSON生成的字串为乱码的问题

友情提示:参数为UTF-8编码过的字串或在用UTF-8保存的程序中直接引用上面的两个静态方法

附:php pack()函数说明

pack

压缩资料到位字符串之中。

语法: string pack(string format, mixed [args]...);

返回值: 字符串(二进制)

函数种类: 资料处理

内容说明

本函数用来将资料压缩打包到位的字符串之中。本函数和 Perl 的同名函数功能用法完全相同。参数 format 为压缩的格式,见下表

a将字符串空白以 NULL 字符填满
A将字符串空白以 SPACE 字符 (空格) 填满
h十六进位字符串,低位在前
H十六进位字符串,高位在前
c有号字符
C无号字符
s有号短整数 (十六位,依计算机的位顺序)
S无号短整数 (十六位,依计算机的位顺序)
n无号短整数 (十六位, 高位在后的顺序)
v无号短整数 (十六位, 低位在后的顺序)
i有号整数 (依计算机的顺序及范围)
I无号整数 (依计算机的顺序及范围)
l有号长整数 (卅二位,依计算机的位顺序)
L无号长整数 (卅二位,依计算机的位顺序)
N无号短整数 (卅二位, 高位在后的顺序)
V无号短整数 (卅二位, 低位在后的顺序)
f单精确浮点数 (依计算机的范围)
d倍精确浮点数 (依计算机的范围)
x空位
X倒回一位
@填入 NULL 字符到绝对位置

使用范例

<?php
print( pack ( "cccc" , 65 , 66 , 67 , 68 ));
echo
"<br>/n" ;
print(
pack ( "h10" , "778899aabb" ));
echo
"<br>/n" ;
print(
pack ( "H10" , "778899aabb" ));
?>

参考资料:

关于 iconv UCS-2 中文乱码问题

UCS-2与UTF8之间的选择

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值