192 votes

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

J'ai un script PHP qui traite une grande variété de langues. Malheureusement, chaque fois que j'essaie d'utiliser json_encode Si l'on utilise la méthode de l'arbre, toute sortie Unicode est convertie en entités hexadécimales. Est-ce le comportement attendu ? Existe-t-il un moyen de convertir la sortie en caractères UTF-8 ?

Voici un exemple de ce que je vois :

INPUT

echo $text;

SORTIE

  .

INPUT

json_encode($text);

SORTIE

"\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u0438 \u0433\u0440\u0435\u0448\u043a\u0430."

1voto

Hoàng Vũ Tgtt Points 1308
json_encode($text, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);

-2voto

abu Points 140

La fonction raw_json_encode() au-dessus de ne m'a pas permis de résoudre le problème (pour une raison quelconque, la fonction de rappel soulevait une erreur sur mon serveur PHP 5.2.5).

Mais cette autre solution a effectivement fonctionné.

https://www.experts-exchange.com/questions/28628085/json-encode-fails-with-special-characters.html

Les crédits doivent aller à Marco Gasi . J'appelle simplement sa fonction au lieu d'appeler json_encode() :

function jsonRemoveUnicodeSequences( $json_struct )
{ 
    return preg_replace( "/\\\\u([a-f0-9]{4})/e", "iconv('UCS-4LE','UTF-8',pack('V', hexdec('U$1')))", json_encode( $json_struct ) );
}

-6voto

JoakimH Points 39

Est-ce le comportement attendu ?

le site json_encode() ne fonctionne qu'avec des données codées UTF-8.

vous pourrez peut-être obtenir une réponse pour le convertir ici : caractères cyrilliques en phps-json-encode

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X