Heim >Backend-Entwicklung >PHP-Tutorial >Lösung für das Problem, dass json_encode in PHP die GB2312-Kodierung nicht unterstützt

Lösung für das Problem, dass json_encode in PHP die GB2312-Kodierung nicht unterstützt

黄舟
黄舟Original
2017-11-15 15:51:072449Durchsuche

Im vorherigen Artikel haben wir das Problem der chinesischen UNICODE-Transkodierung von json_encode in PHP vorgestellt. Deshalb werden wir Ihnen heute weiterhin das Problem vorstellen, dass json_encode in PHP die GB2312-Kodierung nicht unterstützt, in PHP Mit der integrierten Funktion json_encode() (PHP > 5.2) können Daten in PHP übertragen und sehr gut mit anderen Sprachen verwendet werden. Die Funktion dieser Funktion besteht darin, Werte in JSON zu konvertieren Datenspeicherformat.

lautet wie folgt:

$arr = array('Name'=>'希亚', 'Age'=>20); 
$jsonencode = json_encode($arr); 
echo $jsonencode;
Laufende Ergebnisse:

{"Name":null,"Age":20}
Das Chinesisch in der json_encode-Funktion ist als null codiert und es ist Ganz einfach: Um eine enge Integration mit dem Frontend zu gewährleisten, unterstützt Json meiner Meinung nach nur die utf-8-Codierung. Dies ist der Grund, warum das

Javascript des Frontends ebenfalls utf-8 ist. Die Lösung lautet wie folgt:

$array = array (     
'title'=>iconv('gb2312','utf-8','这里是中文标题'),     
'body'=>'abcd...' );  
echo json_encode($array);
Laufergebnis:

{"title":"\u8fd9\u91cc\u662f\u4e2d\u6587\u6807\u9898","body":"abcd..."}
Alle chinesischen Zeichen im Array fehlen oder u2353 usw. erscheinen nach json_encode.

Die Lösung besteht darin, die Funktion urlencode() zu verwenden, um Folgendes vor json_encode zu verarbeiten: Verwenden Sie urlencode(), um den gesamten Inhalt aller Arrays zu verarbeiten, und konvertieren Sie ihn dann mit json_encode() in einen JSON

string und verwenden Sie schließlich urldecode(), um das codierte Chinesisch zurück zu konvertieren.

Ein Beispielprogramm lautet wie folgt:

/************************************************************** 
 * 
 *    使用特定function对数组中所有元素做处理 
 *    @param    string    &$array        要处理的字符串 
 *    @param    string    $function    要执行的函数 
 *    @return boolean    $apply_to_keys_also        是否也应用到key上 
 *    @access public 
 * 
 *************************************************************/ 
function arrayRecursive(&$array, $function, $apply_to_keys_also = false) 
{ 
    static $recursive_counter = 0; 
    if (++$recursive_counter > 1000) { 
        die('possible deep recursion attack'); 
    } 
    foreach ($array as $key => $value) { 
        if (is_array($value)) { 
            arrayRecursive($array[$key], $function, $apply_to_keys_also); 
        } else { 
            $array[$key] = $function($value); 
        } 
 
        if ($apply_to_keys_also && is_string($key)) { 
            $new_key = $function($key); 
            if ($new_key != $key) { 
                $array[$new_key] = $array[$key]; 
                unset($array[$key]); 
            } 
        } 
    } 
    $recursive_counter--; 
} 
 
/************************************************************** 
 * 
 *    将数组转换为JSON字符串(兼容中文) 
 *    @param    array    $array        要转换的数组 
 *    @return string        转换得到的json字符串 
 *    @access public 
 * 
 *************************************************************/ 
function JSON($array) { 
    arrayRecursive($array, 'urlencode', true); 
    $json = json_encode($array); 
    return urldecode($json); 
} 
 
$array = array('Name'=>'希亚', 'Age'=>20); 
 
echo JSON($array);

Zusammenfassung:

Dieser Artikel löst das Problem von json_encode Chinesisch in PHP durch Codefälle Was das Problem der UNICODE-Transkodierung betrifft, glaube ich, dass Freunde, die auf das gleiche Problem stoßen, es leicht lösen können!


Verwandte Empfehlungen:

Detaillierte Erklärung der json_encode()-Funktion in PHP

Lösung für das Problem der chinesischen UNICODE-Transkodierung in json_encode in PHP


Einführung in Anwendungsbeispiele von json_encode in PHP

Das obige ist der detaillierte Inhalt vonLösung für das Problem, dass json_encode in PHP die GB2312-Kodierung nicht unterstützt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn