Heim  >  Artikel  >  Backend-Entwicklung  >  Einführung in die PHP-Funktion json_encode()

Einführung in die PHP-Funktion json_encode()

巴扎黑
巴扎黑Original
2016-11-30 11:53:23941Durchsuche

Durch die Verwendung 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;  
?>

Das laufende Ergebnis des Programms ist wie folgt:

{"Name":null,"Age":20}  
 
json_encode 函数中中文被编码成 null 了,Google 了一下,很简单,为了与前端紧密结合,Json 只支持 utf-8 编码,我认为是前端的 Javascript 也是 utf-8 的原因。
Php代码  
<?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 laufende Ergebnis dieses Programms ist:

Js-Code

{"title":u8fd9u91ccu662fu4e2du6587u6807u9898",body":abcd..."}

Alle chinesischen Zeichen im Array verschwand oder erschien nach json_encode u2353 usw.

Die Lösung besteht darin, die Funktion urlencode() zu verwenden, um Folgendes zu verarbeiten: Verwenden Sie vor json_encode urlencode(), um den gesamten Inhalt aller Arrays zu verarbeiten, und konvertieren Sie ihn dann mit json_encode() in einen JSON-String. und schließlich verwenden urldecode () Konvertieren Sie das codierte 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 laufenden Ergebnisse sind wie folgt:

Js-Code

{"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