Maison >développement back-end >tutoriel php >Solution au problème selon lequel json_encode en php ne prend pas en charge l'encodage GB2312

Solution au problème selon lequel json_encode en php ne prend pas en charge l'encodage GB2312

黄舟
黄舟original
2017-11-15 15:51:072464parcourir

Dans l'article précédent, nous avons présenté le problème du transcodage UNICODE chinois json_encode en php, nous allons donc aujourd'hui continuer à vous présenter le problème que json_encode en php ne prend pas en charge l'encodage GB2312, en php En utilisant json_encode() fonction intégrée (php > 5.2), les données en php peuvent être très bien transférées et utilisées avec d'autres langages. La fonction de cette fonction est de convertir des valeurs en json. format de stockage des données.

est le suivant :

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

Résultats d'exécution :

{"Name":null,"Age":20}

Le chinois dans la fonction json_encode est codé comme null Je l'ai recherché sur Google et c'est. très simple. , afin d'être étroitement intégré au front-end, Json ne prend en charge que l'encodage utf-8. Je pense que c'est la raison pour laquelle le Javascript du front-end est également utf-8. La solution est la suivante :

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

Résultat de l'exécution :

{"title":"\u8fd9\u91cc\u662f\u4e2d\u6587\u6807\u9898","body":"abcd..."}

Tous les caractères chinois du tableau sont manquants ou u2353 etc. apparaissent après json_encode.

La solution est d'utiliser la fonction urlencode() pour traiter ce qui suit. Avant json_encode, utilisez urlencode() pour traiter tout le contenu de tous les tableaux, puis utilisez json_encode() pour le convertir en json<.>string, et enfin utilisez urldecode() pour reconvertir le chinois encodé.

Un exemple de programme est le suivant :

/************************************************************** 
 * 
 *    使用特定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);

Résumé :

Cet article résout le problème du json_encode chinois en php à travers des cas de code Concernant le problème du transcodage UNICODE, je crois que les amis qui rencontrent le même problème peuvent facilement le résoudre !


Recommandations associées :

Explication détaillée de la fonction json_encode() en php

Solution au problème du transcodage UNICODE chinois en json_encode en php


Introduction aux exemples d'utilisation de json_encode en php

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn