Maison >php教程 >PHP开发 >Solution à json_encode en php pour traiter les problèmes chinois brouillés gbk et gb2312

Solution à json_encode en php pour traiter les problèmes chinois brouillés gbk et gb2312

高洛峰
高洛峰original
2016-12-27 16:15:121902parcourir

Cet article décrit comment json_encode en php gère le problème chinois tronqué de gbk et gb2312. La méthode spécifique est la suivante :

1.json_encode() Le chinois renvoie null pour le chinois en gbk/gb2312

.
$arr = array (
 array (
   'catid' => '4',
   'catname' => 'www.jb51.net',
   'meta_title' => '脚本之家'
  )
);
  
echo json_encode($arr);

Résultat de l'exécution :

[{"catid":"4","catname":"www.jb51.net","meta_title":null}]

Regardez "meta_title" : null Il avait à l'origine une valeur de "Script Home". Nous avons vérifié et le principe est que json_encode ne prend en charge que l'encodage uft-8

<?php
$data="JSON中文";
$newData=iconv("GB2312″,"UTF-8//IGNORE",$data);
echo $newData;
//ignore的意思是忽略转换时的错误,如果没有ignore参数,所有该字符后面的字符都不会被保存。
//或是("GB2312″,"UTF-8″,$data);
?>

2. La page PHP d'arrière-plan (la page est codée en UTF-8 ou les caractères ont été convertis en UTF-8) utilise json_encode pour convertir le tableau en PHP en une chaîne JSON. Par exemple :

<?php
$testJSON=array(&#39;name&#39;=>&#39;中文字符串&#39;,&#39;value&#39;=>&#39;test&#39;);
echo json_encode($testJSON);
?>

Afficher le résultat de sortie :

{"name":"u4e2du6587u5b57u7b26u4e32″,"value":"test"}

Visible Même si des caractères codés en UTF8 sont utilisés, des caractères chinois tronqués apparaissent lors de l'utilisation de json_encode. La solution est de traiter les caractères avec la fonction urlencode() avant d'utiliser json_encode, puis json_encode, puis d'utiliser la fonction urldecode() pour les reconvertir lors de la sortie du résultat. Les détails sont les suivants :

<?php
$testJSON=array(&#39;name&#39;=>&#39;中文字符串&#39;,&#39;value&#39;=>&#39;test&#39;);
//echo json_encode($testJSON);
foreach ( $testJSON as $key => $value ) {
$testJSON[$key] = urlencode ( $value );
}
echo urldecode ( json_encode ( $testJSON ) );
?>

Afficher le résultat de sortie :

{"name":"中文字符串","value":"test"}

Résumé : La fonction json_encode ne peut traiter que les chaînes uft8. Si elle est chinoise, elle ne gère probablement pas bien les octets, car les longueurs du chinois gbk et uft sont différentes. Cela ne sera pas présenté en profondeur.

Pour plus d'articles connexes sur la façon dont json_encode en PHP gère les problèmes gbk et gb2312 chinois tronqués, veuillez prêter attention au site Web PHP 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