php5.4以前でjson_encodeを行うと、中国語はunicodeでエンコードされ、中国語は「u***」形式と同様にエンコードされて読めなくなり、送信データ量もある程度増加します。
例:
コードをコピーします コードは次のとおりです:
$str = '中国語';
//"u4e2du6587"
で始まりますphp5.4
echo json_encode($str, JSON_UNESCAPED_UNICODE);
//「中国語」
php5.4 により、json は中国語をよりよく理解できるようになります。
Unicode トランスコーディングは 5.4 より前では実行されませんでした。これに対処するには 3 つの方法があります
: しかし実際には、最初の 2 つの方法は、いくつかの特殊なケースで問題を引き起こす可能性があります。例として:
コードをコピーします コードは次のとおりです。
function myjson($code) {
$code = json_encode(urlencodeAry($code))
return urldecode($code);
関数 urlencodeAry ($data) {
if(is_array($data)) {
foreach($data as $key=>$val) {
$data[$key] = urlencodeAry($val); }
return $data ;
} else {
return urlencode($data);
}
$test = array (
0 => '「大連周水子空港」→人民路',
1 => '運行中時間: 5:10~21:00 運賃: 16 元 20 分ごとに出発、
);
/*
通常の json_encode|json_decode でエンコードおよびデコード
[""u5927u8fdeu5468u6c34u5b50u673au573a"u2192u4ebau6c11 u 8def"," u8fd0u8425u65f6
u95f4uff1a5uff1a10uff5e21uff1a00 u7968u4ef7uff1a16u5143 u53d1u8f66u95f4u969420
u5206u949fu4e00u73eduff0cu5ba2u6ee1u968fu 65f6u53d1u8f66"]
array (
0 => '「大連周水子空港」→人民路',
1 => '営業時間:5:10~21:00チケット料金:16元出発 20分ごとに出発,
)
$test1 = json_encode($test);
echo $test1; *
myjson|json_decode でエンコードおよびデコードしますが、エラー json_last_error が返されます (JSON_ERROR_SYNTAX === 4),
""大連周水子空港" → 人民路"
[" "大連周水子空港" → 人民路", "運行時間: 5:10~21:00 運賃: 16 元、20 分ごとに出発、満席時はいつでも出発"]
NULL
*/
$test1_1 = myjson( $test);
$test2_1 = json_decode( $test1_1, TRUE);
echo $test1_1;
var_export($test2_1);
echo PHP_EOL
json_enco+pack|json_decode でエンコードされないことが保証されます。ただし、運行時間と運賃のデータが不足します
[""大連周水子空港"→人民路","運行時間::~: 料金: 元 1分ごとに出発、満席時はいつでも出発 "]
array (
0 => '「大連周水子空港」→人民路',
1 => '運行時間: :~: 運賃: 満席時は毎分出発。',
)
*/
function replaceUni($str) {
return 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);
echo $test1_2;
echo PHP_EOL;
var_export($test2_2);
echo PHP_EOL;
最後に、PHP が中国語をよりよく理解できるようにするために、PHP5.4 にアップグレードすることをお勧めします。
http://www.bkjia.com/PHPjc/326510.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/326510.html
技術記事
php5.4以前でjson_encodeを行うと、中国語はunicodeでエンコードされ、中国語は「u***」形式と同様にエンコードされて読めなくなり、送信データもある程度増加します...