この記事では、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); ?>
{"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 ) ); ?>