<?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()函数说明
压缩资料到位字符串之中。
语法: 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" ));
?>
参考资料: