ホームページ >バックエンド開発 >PHPチュートリアル >PHP5.4 での json_encode 中国語トランスコーディングの変更点 [json が中国語をよりよく理解できるようにする]_PHP チュートリアル

PHP5.4 での json_encode 中国語トランスコーディングの変更点 [json が中国語をよりよく理解できるようにする]_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-14 10:08:191133ブラウズ

php5.4以前でjson_encodeを行うと、中国語はunicodeでエンコードされてしまい、「u***」形式と同様に中国語がエンコードされて読めなくなり、送信データ量もある程度増加します。

例:
$str = '中国語';
echo json_encode($str);
//「u4e2du6587」
php5.4が始まります
echo json_encode($str, JSON_UNESCAPED_UNICODE);
//「中国語」
php5.4 により、json は中国語をよりよく理解できるようになります!
Unicode トランスコーディングは 5.4 より前では実行されませんでした。これに対処するには 3 つの方法があります:
PHP5.4 の json_encode 中国語トランスコーディングの変更により、json は中国語をよりよく理解できるようになります
しかし実際には、最初の 2 つの方法は、いくつかの特殊な状況で問題を引き起こす可能性があります。例として:
関数 myjson($code) {
$code = json_encode(urlencodeAry($code));
urldecode($code)を返します;
}
関数 urlencodeAry($data) {
if(is_array($data)) {
foreach($data as $key=>$val) {
$data[$key] = urlencodeAry($val);
}
$data を返す;
} 他 {
URLencode ($ データ) を返します。
}
}
$test = 配列 (
0 => '「大連周水子空港」→人民路',
1 => '運行時間: 5:10~21:00 運賃: 16元、20分ごとに出発、満席時はいつでも出発',
);
/*
通常の json_encode|json_decode によるエンコードとデコード
[""u5927u8fdeu5468u6c34u5b50u673au573a"u2192u4ebau6c11u8def","u8fd0u8425u65f6
u95f4uff1a5uff1a10uff5e21uff1a00 u7968u4ef7uff1a16u5143 u53d1u8f66u95f4u969420
u5206u949fu4e00u73eduff0cu5ba2u6ee1u968fu65f6u53d1u8f66"]
配列 (
0 => '「大連周水子空港」→人民路',
1 => '運行時間: 5:10~21:00 運賃: 16元、20分ごとに出発、満席時はいつでも出発',
)
*/
$test1 = json_encode($test);
$test2 = json_decode($test1, TRUE);
エコー $test1;
エコー PHP_EOL;
var_export($test2);
エコー PHP_EOL;
/*
myjson|json_decode を通じてエンコードおよびデコードしますが、エラー json_last_error が返されます (JSON_ERROR_SYNTAX === 4)。
「大連周水子空港」→人民路だから
[「大連周水子空港」→人民路、「運行時間:5:10~21:00 運賃:16元、20分ごとに出発、満席時はいつでも出発」]
ヌル
*/
$test1_1 = myjson($test);
$test2_1 = json_decode($test1_1, TRUE);
エコー $test1_1;
エコー PHP_EOL;
var_export($test2_1);
エコー PHP_EOL;
/*
json_enco+pack|json_decode を使用してエンコードとデコードを行い、中国語はエンコードされませんが、運行時間データと運賃は欠落します
[""大連周水子空港"→人民路","運行時間::~: 料金: 元 1分ごとに出発、満席時はいつでも出発"]
アレイ (www.2cto.com
)
0 => '「大連周水子空港」→人民路',
1 => '運行時間: :~: 料金: 元 1分ごとに出発、満席時はいつでも出発',
)
*/
関数 replaceUni($str) {
戻り値 preg_replace("#\u([0-9a-f]+)#ie", "iconv('UCS-2', 'UTF-8', Pack('H4', '\1'))" 、$str);
}
$test1_2 = replaceUni(json_encode($test));
$test2_2 = json_decode($test1_2, TRUE);
エコー $test1_2;
エコー PHP_EOL;
var_export($test2_2);
エコー PHP_EOL;

www.bkjia.com本当http://www.bkjia.com/PHPjc/477796.html技術記事 php5.4以前でjson_encodeを行うと、中国語はunicodeでエンコードされてしまい、u***形式と同様に中国語がエンコードされて読めなくなってしまい、送信データ量もある程度増えてしまいます…
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。