Maison > Article > développement back-end > Solution au problème selon lequel l'encodage chinois php json est nul
J'ai utilisé la fonction json_encode aujourd'hui et j'ai découvert que le texte chinois était nul.
Analyse des causes : lors de l'utilisation de la fonction json_encode, l'encodage utf-8 doit être utilisé.
Solution : utilisez iconv('gbk','utf8' avant la fonction json_encode. )fonction. Le champ obtenu par la fonction
function gbk2utf8($data) { if(is_array($data)) { return array_map('gbk2utf8', $data); } return iconv('gbk','utf-8',$data); } //以下是找的另一种方法
PHP de la base de données est en chinois. Je souhaite utiliser json_encode() pour le renvoyer à la réception, mais json_encode est nul après encodage du chinois.
L'utilisation de la fonction intégrée json_encode() en php (php > 5.2) peut être utilisée. Les données en php peuvent être transférées et bien utilisées avec d'autres langages.
La fonction de cette fonction est de convertir des valeurs numériques au format de stockage de données json.
<?php $arr = array ( 'Name'=>'希亚', 'Age'=>20 ); $jsonencode = json_encode($arr); echo $jsonencode; ?>
Les résultats d'exécution du programme sont les suivants :
{"Name":null,"Age":20}
Le chinois dans la fonction json_encode est codé comme null, Google Après un certain temps, c'est très simple. Afin de s'intégrer étroitement au front-end, Json ne prend en charge que l'encodage utf-8. Je pense que c'est parce que le Javascript front-end est également utf-8.
<?php $array = array ( 'title'=>iconv('gb2312','utf-8','这里是中文标题'), 'body'=>'abcd...' ); echo json_encode($array); ?>
Le résultat de l'exécution de ce programme est :
{"title":"u8fd9u91ccu662fu4e2du6587u6807u9898","body":"abcd...">
dans le tableau Tous les caractères chinois 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 chaîne json, et enfin utilisez urldecode() pour reconvertir le chinois codé.
<?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('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); ?>
Cette fois c'est réussi, les résultats en cours d'exécution sont les suivants :
{"Name": "Xia", "Age": "20" }