Heim  >  Artikel  >  Backend-Entwicklung  >  Lösung für das Problem, dass die chinesische PHP-JSON-Kodierung null ist

Lösung für das Problem, dass die chinesische PHP-JSON-Kodierung null ist

巴扎黑
巴扎黑Original
2016-12-22 14:28:251668Durchsuche

Ich habe heute die Funktion json_encode verwendet und festgestellt, dass der chinesische Text null war.

Ursachenanalyse: Bei Verwendung der json_encode-Funktion sollte UTF-8-Kodierung verwendet werden. Meine Seite verwendet gbk.

Lösung: Verwenden Sie iconv('gbk','utf8' vor der json_encode-Funktion). Funktion. Das von der Funktion

function gbk2utf8($data)
{
 if(is_array($data))
  {
    return array_map('gbk2utf8', $data);
  }
 return iconv('gbk','utf-8',$data);
}
   
//以下是找的另一种方法

PHP aus der Datenbank erhaltene Feld ist auf Chinesisch. Ich möchte json_encode() verwenden, um es an die Rezeption zurückzugeben, aber json_encode ist nach der Codierung auf Chinesisch null.

Mit der in PHP integrierten Funktion json_encode() (PHP > 5.2) können die Daten in PHP übertragen und gut mit anderen Sprachen verwendet werden.

Die Funktion dieser Funktion besteht darin, numerische Werte in das JSON-Datenspeicherformat zu konvertieren.

<?php
$arr = array
    (
     &#39;Name&#39;=>&#39;希亚&#39;,
     &#39;Age&#39;=>20
    );
 
$jsonencode = json_encode($arr);
echo $jsonencode;
?>

Die Ergebnisse der Programmausführung lauten wie folgt:
{"Name":null,"Age":20}
Chinesisch in der json_encode-Funktion ist codiert als null, Google Nach einer Weile ist es sehr einfach, Json eng in das Front-End zu integrieren. Ich denke, das liegt daran, dass das Front-End auch utf-8 ist.

<?php
$array = array
    (
        &#39;title&#39;=>iconv(&#39;gb2312&#39;,&#39;utf-8&#39;,&#39;这里是中文标题&#39;),
        &#39;body&#39;=>&#39;abcd...&#39;
    );
 
echo json_encode($array);
?>

Das Ergebnis der Ausführung dieses Programms ist:
{"title":"u8fd9u91ccu662fu4e2du6587u6807u9898","body":"abcd..."}
in Im Array fehlen alle chinesischen Zeichen oder u2353 usw. erscheinen nach json_encode.
Die Lösung besteht darin, die Funktion urlencode() zu verwenden, um Folgendes zu verarbeiten: Vor json_encode den gesamten Inhalt aller Arrays mit urlencode() verarbeiten, ihn dann mit json_encode() in einen JSON-String konvertieren und schließlich verwenden urldecode() zum Konvertieren des codierten Chinesisch zurück.

<?php
/**************************************************************
 *
 *  使用特定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(&#39;possible deep recursion attack&#39;);
  }
  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, &#39;urlencode&#39;, true);
    $json = json_encode($array);
    return urldecode($json);
}
 
$array = array
    (
     &#39;Name&#39;=>&#39;希亚&#39;,
     &#39;Age&#39;=>20
    );
 
 
echo JSON($array);
?>

Diesmal war es erfolgreich, die Laufergebnisse sind wie folgt:
{"Name"::Xia,Alter: „20“ }


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