解决json乱码问题

 

  
  
  
  
  1. <?php 
  2. class Json{ 
  3.     private static $os =null; 
  4.     public static function getOs(){ 
  5.         if(null===self::$os){ 
  6.             self::$os = substr(PHP_OS,0,3); 
  7.         } 
  8.         return self::$os
  9.     } 
  10.     public static function encode($str){ 
  11.         $code = json_encode($str); 
  12.         if('WIN'==self::getOs()){ 
  13.             $s_format = 'UCS-2'
  14.         } else { 
  15.             $s_format = 'UCS-2BE'
  16.         } 
  17.         return preg_replace("#///u([0-9a-f]+)#ie""iconv('{$s_format}', 'UTF-8', pack('H4', '//1'))"$code); 
  18.     } 
  19.     public static function decode($str){ 
  20.         return json_decode($str); 
  21.     } 
  22. ?> 

用上面的代码可以解决在存储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 字符到绝对位置

使用范例

 

  
  
  
  
  1. <?php 
  2. print( pack ( "cccc" ,  65 ,  66 ,  67 ,  68 )); 
  3. echo  "<br>/n" ; 
  4. print( pack ( "h10" ,  "778899aabb" )); 
  5. echo  "<br>/n" ; 
  6. print( pack ( "H10" ,  "778899aabb" )); 
  7. ?> 

 

你可能感兴趣的:(json,乱码问题)