Maison  >  Article  >  développement back-end  >  Comment décoder et encoder du JSON avec des caractères Unicode en PHP ?

Comment décoder et encoder du JSON avec des caractères Unicode en PHP ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-31 13:18:30435parcourir

How to Decode and Encode JSON with Unicode Characters in PHP?

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!

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