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で保存されたプログラムで上記の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文字を絶対位置に入力
使用例
- <?php
- print( pack ( "cccc" , 65 , 66 , 67 , 68 ));
- echo "<br>/n" ;
- print( pack ( "h10" , "778899aabb" ));
- echo "<br>/n" ;
- print( pack ( "H10" , "778899aabb" ));
- ?>