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!