Dieser Artikel beschreibt, wie json_encode in PHP das chinesische verstümmelte Problem von gbk und gb2312 behandelt. Die spezifische Methode lautet wie folgt:
1.json_encode() Chinesisch gibt null für Chinesisch in gbk/gb2312 zurück
$arr = array ( array ( 'catid' => '4', 'catname' => 'www.jb51.net', 'meta_title' => '脚本之家' ) ); echo json_encode($arr);
Laufergebnis:
[{"catid":"4","catname":"www.jb51.net","meta_title":null}]
Schauen Sie sich „meta_title“ an: null Es hatte ursprünglich den Wert „Script Home“. Das Prinzip ist, dass json_encode nur die uft-8-Codierung unterstützt >
2. Die PHP-Hintergrundseite (die Seite ist als UTF-8 codiert oder die Zeichen wurden in UTF-8 konvertiert) verwendet json_encode, um das Array-Array in PHP in einen JSON-String zu konvertieren. Beispiel:
<?php $data="JSON中文"; $newData=iconv("GB2312″,"UTF-8//IGNORE",$data); echo $newData; //ignore的意思是忽略转换时的错误,如果没有ignore参数,所有该字符后面的字符都不会被保存。 //或是("GB2312″,"UTF-8″,$data); ?>
Ausgabeergebnis anzeigen:
<?php $testJSON=array('name'=>'中文字符串','value'=>'test'); echo json_encode($testJSON); ?>
Sichtbar Selbst wenn UTF8-kodierte Zeichen verwendet werden, erscheinen bei Verwendung von json_encode verstümmelte chinesische Zeichen. Die Lösung besteht darin, die Zeichen mit der Funktion urlencode() zu verarbeiten, bevor Sie json_encode und dann json_encode verwenden, und sie dann bei der Ausgabe des Ergebnisses mit der Funktion urldecode() zurückzukonvertieren. Die Details lauten wie folgt:
{"name":"u4e2du6587u5b57u7b26u4e32″,"value":"test"}
Ausgabeergebnis anzeigen:
<?php $testJSON=array('name'=>'中文字符串','value'=>'test'); //echo json_encode($testJSON); foreach ( $testJSON as $key => $value ) { $testJSON[$key] = urlencode ( $value ); } echo urldecode ( json_encode ( $testJSON ) ); ?>
Zusammenfassung: Die json_encode-Funktion kann nur uft8-Zeichenfolgen verarbeiten. Wenn sie chinesisch ist, verarbeitet sie Bytes wahrscheinlich nicht gut, da die Längen von chinesischem gbk und uft unterschiedlich sind.
{"name":"中文字符串","value":"test"}