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で保存されたプログラムで上記の2つの静的メソッドを直接参照します.
添付:php pack()関数の説明
pack
データを文字列に圧縮します.
構文:string pack(string format,mixed[args]...);
戻り値:文字列(バイナリ)
関数の種類:資料処理
 
内容の説明
この関数は、データを圧縮して格納する文字列に使用します.この関数とPerlの同名関数の機能の使い方はまったく同じです.パラメータformatは圧縮のフォーマットで、次の表を参照してください.
a
文字列の空白をNULL文字で埋める
A
文字列の空白をSPACE文字(スペース)で埋めます.
h
16進文字列、下位は前
H
16進文字列、上位
c
符号付き文字
C
符号なし文字
s
符号付き短整数(16ビット、コンピュータのビット順)
S
符号なしの短い整数(16ビット、コンピュータのビット順)
n
符号なしの短い整数(16ビット、上位が後の順序)
v
符号なしの短い整数(16ビット、下位の順)
i
符号付き整数(コンピュータの順序および範囲による)
I
符号なし整数(コンピュータの順序および範囲による)
l
符号長整数
L
無号長整数
N
無号短整数(卅二位、高位が後の順)
V
無号短整数(卅二位、低位が後の順)
f
単一の正確な浮動小数点数(コンピュータの範囲による)
d
倍精確浮動小数点数(計算機の範囲による)
x
空席
X
1位を取り返す
@
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. ?>