Maison >développement back-end >tutoriel php >Pourquoi la fonction json_encode de PHP convertit-elle les chaînes UTF-8 en entités hexadécimales ?

Pourquoi la fonction json_encode de PHP convertit-elle les chaînes UTF-8 en entités hexadécimales ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-02 19:32:30453parcourir

Why Does PHP's json_encode Function Convert UTF-8 Strings to Hexadecimal Entities?

La fonction PHP json_encode convertit les chaînes UTF-8 en entités hexadécimales : pourquoi et comment le résoudre

La fonction PHP json_encode peut encoder des variables PHP en JSON (JavaScript Object Notation). Cependant, lorsqu'il s'agit de caractères Unicode en codage UTF-8, la fonction peut les convertir par défaut en entités hexadécimales. En effet, JSON ne prend pas en charge nativement les caractères UTF-8, qui sont des caractères multi-octets représentant des caractères non-ASCII.

Pourquoi PHP convertit-il les chaînes UTF-8 en entités hexadécimales ?

La fonction json_encode de PHP utilise la spécification JSON, qui stipule que les caractères Unicode non représentables en caractères ASCII doivent être codés à l'aide de séquences d'échappement hexadécimales. Cela garantit la compatibilité avec les anciennes applications et appareils qui peuvent ne pas prendre en charge UTF-8.

Résoudre le problème de conversion

Pour résoudre ce problème et éviter la conversion de UTF-8 chaînes en entités hexadécimales, PHP a introduit l'option JSON_UNESCAPED_UNICODE dans la version 5.4.0. Cette option demande à json_encode d'utiliser des points de code Unicode au lieu de séquences d'échappement hexadécimales pour les caractères non-ASCII.

Exemple

Supposons que vous disposiez du script PHP suivant :

<code class="php"><?php
$text = "База данни грешка.";
echo json_encode($text);
?></code>

Ce code affichera la chaîne JSON suivante, où les caractères cyrilliques sont codés sous forme d'entités hexadécimales :

<code class="json">"\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u0438 \u0433\u0440\u0435\u0448\u043a\u0430."</code>

Pour afficher directement les caractères UTF-8, vous pouvez utiliser l'option JSON_UNESCAPED_UNICODE :

<code class="php"><?php
$text = "База данни грешка.";
echo json_encode($text, JSON_UNESCAPED_UNICODE);
?></code>

Cela produira la chaîne JSON suivante, où les caractères cyrilliques sont représentés à l'aide de leurs points de code Unicode :

<code class="json">"База данни грешка."</code>

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