Maison > php教程 > PHP开发 > le corps du texte

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

高洛峰
Libérer: 2016-12-27 16:15:12
original
1872 Les gens l'ont consulté

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);
Copier après la connexion

Résultat de l'exécution :

[{"catid":"4","catname":"www.jb51.net","meta_title":null}]
Copier après la connexion

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);
?>
Copier après la connexion

<🎜. >

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);
?>
Copier après la connexion

Afficher le résultat de sortie :

{"name":"u4e2du6587u5b57u7b26u4e32″,"value":"test"}
Copier après la connexion

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 ) );
?>
Copier après la connexion

Afficher le résultat de sortie :

{"name":"中文字符串","value":"test"}
Copier après la connexion

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 !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Recommandations populaires
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!