<?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" ));
?>
参考资料:
8万+

被折叠的 条评论
为什么被折叠?



