Décodage et encodage PHP JSON avec des caractères Unicode
Problèmes de décodage de caractères Unicode
Lors de la tentative pour décoder du JSON contenant des caractères Unicode, vous pouvez rencontrer des problèmes si les caractères se situent dans certaines limites. Plus précisément, les caractères tels que "" et "" ne peuvent pas apparaître dans les chaînes JSON. De plus, les caractères de contrôle ne sont pas autorisés.
Encodage et décodage UTF-8
Pour résoudre ce problème, vous pouvez utiliser utf8_encode pour permettre à la chaîne d'être décodée avec json_decode. Cependant, cela peut entraîner la mutilation des personnages. Par exemple, "Odómetro" serait converti en "Odómetro".
Réencodage et échappement des caractères
Lors du réencodage du tableau, le caractère est échappé en ASCII, qui est correct selon la spécification JSON : "Tag"=>"Odu00f3metro". Pour annuler l'échappement du caractère, vous pouvez utiliser l'option JSON_UNESCAPED_UNICODE pour `json_encode. Cependant, cela n'est disponible qu'en PHP 5.4 ou version ultérieure.
Solution alternative utilisant Regex
Si vous êtes limité à PHP 5.3, vous pouvez utiliser une solution basée sur regex solution :
$json = json_encode($array, JSON_UNESCAPED_SLASHES); // Replace escaped unicode characters with their UTF-8 equivalents $json = preg_replace('/\\u([0-9a-fA-F]{4})/', '&#x;', $json);
En utilisant le drapeau JSON_UNESCAPED_SLASHES, vous empêchez les barres obliques () d'être échappées dans la chaîne JSON. Le modèle regex correspond ensuite aux caractères Unicode échappés (u####) et les remplace par leurs équivalents UTF-8.
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!