この記事では、php の json_encode が gbk と gb2312 の中国語文字化け問題を処理する方法について説明します。具体的な方法は次のとおりです:
1.json_encode() gbk/gb2312 の中国語に対して null を返す
実行結果。 :
$arr = array ( array ( 'catid' => '4', 'catname' => 'www.jb51.net', 'meta_title' => '脚本之家' ) ); echo json_encode($arr);
"meta_title":null を見てみましょう。 元々は "Script Home" の値を持っていました。 確認したところ、原則として json_encode は uft-8 エンコーディングのみをサポートしています。
[{"catid":"4","catname":"www.jb51.net","meta_title":null}]
<?php $data="JSON中文"; $newData=iconv("GB2312″,"UTF-8//IGNORE",$data); echo $newData; //ignore的意思是忽略转换时的错误,如果没有ignore参数,所有该字符后面的字符都不会被保存。 //或是("GB2312″,"UTF-8″,$data); ?>出力結果を次のように表示します:
<?php $testJSON=array('name'=>'中文字符串','value'=>'test'); echo json_encode($testJSON); ?>UTF8でエンコードされた文字を使用しても、json_encodeでも中国語文字化けが発生することがわかります。解決策は、json_encode を使用する前に関数 urlencode() で文字を処理し、次に json_encode を使用してから、結果を出力するときに関数 urldecode() を使用して文字を変換することです。詳細は次のとおりです:
{"name":"u4e2du6587u5b57u7b26u4e32″,"value":"test"}出力結果を次のように表示します:
<?php $testJSON=array('name'=>'中文字符串','value'=>'test'); //echo json_encode($testJSON); foreach ( $testJSON as $key => $value ) { $testJSON[$key] = urlencode ( $value ); } echo urldecode ( json_encode ( $testJSON ) ); ?>概要: json_encode 関数は、中国語の場合、バイトを適切に処理できない可能性があります。中国の gbk と uft 長さが異なるため、詳細は説明しません。 gbk および gb2312 中国語の文字化け問題に対処するための PHP の json_encode に関するその他の関連記事については、PHP 中国語 Web サイトに注目してください。