Json_Encode漢字のunicodeへの変換を防止する方法

2005 ワード

みんな知ってるよjsonencodeは通常jsonの漢字をunicodeに変換しますが、これは必ずしも私たちが望んでいるわけではありません.gbk符号化されたjson文字列(漢字形式の文字列を符号化すれば得られる)のような漢字形式のjson文字列を得る必要がある場合がある.何かいい方法がありますか.
php公式はこの需要を聞いて、信頼できる解決策を提供しました:JSON_UNESCAPED_UNICODE.このパラメータはjson_を保証します.Encodeは漢字をunicodeに変換しません.
これで解決したようですか?私たちが喜んでこのパラメータを使ったとき、卵用は何もないことに気づいた.よく見ると、このパラメータは5.4以降のphpでしかサポートされていません.もっと初期のphpはどうしますか?
コミュニティには次のようなシナリオがあります.

function my_json_encode($arr){
//convmap since x char codes so it takes all multibyte codes (above ASCII ). So such characters are being "hidden" from normal json_encoding
array_walk_recursive($arr, function (&$item, $key) { if (is_string($item)) $item = mb_encode_numericentity($item, array (x, xffff, , xffff), 'UTF-'); });
return mb_decode_numericentity(json_encode($arr), array (x, xffff, , xffff), 'UTF-');
}

しかし、5.2は匿名関数をサポートしていないため、この方法は5.3でしかサポートされていません.解決策については?匿名関数を定義すればいいです.
ps:jsonを解決するEncode中国語UNICODトランスコード問題
PHPのjsonでencodeが中国語を扱う場合、中国語はすべて符号化され、読めない、似たような「u***」のフォーマットになります.漢字をトランスコードしないためには、ここで3つの方法を提供します.
1.PHPをアップグレードし、PHP 5.4、この問題はやっと解決して、Jsonは1つの選択肢を追加しました:JSON_UNESCAPED_UNICode、だから名前が不思議で、つまりJsonはUnicodeをコードしないでください.

 
 

2.漢字をurlencodeにしてからjsonを使うencode,json_encodeの後にurldecodeを再使用して復号すると、符号化されたjson配列の漢字にunicode符号化は現れません.

$array = array(
'test'=>urlencode("    ")
);
$array = json_encode($array);
echo urldecode($array);
//{"test":"    "}

3.unicodeコードを再復号し、復号関数は以下の通りである.

function decodeUnicode($str)
{
return preg_replace_callback('/\\\\u([0-9a-f]{4})/i',
create_function(
'$matches',
'return mb_convert_encoding(pack("H*", $matches[1]), "UTF-8", "UCS-2BE");'
),
$str);
}