ホームページ  >  記事  >  バックエンド開発  >  json_encode 中国語表示の問題解決_PHP チュートリアル

json_encode 中国語表示の問題解決_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:57:171389ブラウズ

phpのjson_encodeの中国語表示問題は多くのプログラマーを悩ませる問題です。参考までに中国語表示問題に対する2つの解決策を紹介します。

Json は、現在の Web 開発で最も一般的に使用されるデータ形式になっています。PHP は、5.2 以降、json および配列変換関数 json_encode および json_decode もサポートしています。しかし、使用中に、json_encode 関数によって変換された中国語はすべて u4f60 (you) に似たエンコーディングになることがわかります (以下では漢字「you」を例にします)。これはプログラムの実行には影響しませんが、非常に影響を受けます。直感的ではない

まず、json_encode は中国語を Unicode コード u4f60 の対応する 16 進表現 (js (%u4f60) のエスケープ関数と同様)、つまり 0x4f60 に変換します。したがって、Unicode コード (UCS-2) を utf-8 でエンコードされた中国語文字に変換するだけで済みます。機能は次のとおりです:

コードは次のとおりです コードをコピー

/**
* json_encode は中国語版をサポートします
* @param 混合 $data パラメーターは json_encode とまったく同じです
​*/
関数 json_encode_cn($data) {
$data = json_encode($data);
return preg_replace("/u([0-9a-f]{4})/ie", "iconv('UCS-2', 'UTF-8', Pack('H*', '$1')); "、$data);
}

ここでは、まずターゲット データを Unicode でエンコードされた JSON 文字列に変換し、次に通常のルールを使用して u で始まる対応する 4 文字を対応するテキストに置き換えてから、再度トランスコードします。 preg_replace Regular の e により、2 番目のパラメータで eval 操作を実行できます。まず、uxxxx と一致し、次に Pack 関数を使用して 16 進値 xxxx を Unicode でエンコードされた文字に変換し、次に Unicode コードを utf-8 コードに変換します。 , すると普通の漢字が表示されます。

json_encode() が漢字をサポートしない別の解決策

コードは次のとおりです コードをコピー

/**
* Urlencode 配列とスカラー
* 通常は wphp_json_encode() を呼び出します
* json_encode の中国語表示の問題を処理します
* @param 配列 $data
* @戻り文字列
​*/
関数 wphp_urlencode($data) {
if (is_array($data) || is_object($data)) {
foreach ($data as $k => $v) {
if (is_scalar($v)) {
If (is_array($data)) {
$data[$k] = urlencode($v);
else if (is_object($data)) {
$data->$k = urlencode($v);
}
} else if (is_array($data)) {
$data[$k] = wphp_urlencode($v) //この関数を再帰的に呼び出します
; else if (is_object($data)) {
$data->$k = wphp_urlencode($v);
}
}
}
$data を返します;
}

/**
* jsonエンコーディング
*
* json_encode()処理後の中国語表示が直感的でない問題を解決
* デフォルトでは、「中国語」は「u4e2du6587」に変更されますが、直感的ではありません
※特別な必要がない場合は、json_encodeを直接使用してリソースを節約することをお勧めします
* json_encode() はパラメータのエンコード形式が UTF-8 の場合にのみ正常に動作します
*
* @param 配列|オブジェクト $data
* @return 配列|オブジェクト
​*/
関数 ch_json_encode($data) {
$ret = wphp_urlencode($data);
$ret = json_encode($ret);
return urldecode($ret);
}

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/632104.html技術記事 PHP の json_encode の中国語表示問題は多くのプログラマーを悩ませる問題です。参考までに中国語表示問題の解決策を 2 つ紹介します。 json は... になりました...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。