web-dev-qa-db-fra.com

Est-il possible de retourner PHP `json_encode` avec encoder UTF-8 et non Unicode?

Est-il possible de retourner PHP json_encode Avec le codage UTF-8 et non Unicode?

$arr=array('a'=>'á');
echo json_encode($arr);

mb_internal_encoding('UTF-8'); et $arr=array_map('utf8_encode',$arr); ne le corrige pas.

Résultat: {"a":"\u00e1"}

Résultat attendu: {"a":"á"}

43
Binyamin

{"a":"\u00e1"} et {"a":"á"} sont différentes façons d'écrire le même document JSON; Le décodeur JSON décode l'échappement unicode.

Dans php 5.4+, le php json_encode a le JSON_UNESCAPED_UNICODE option pour sortie simple. Sur les anciennes versions de php, vous pouvez déployer votre propre encodeur JSON qui n'encode pas les caractères non ASCII, ou utiliser Pear's l'encodeur JSON et supprimer les lignes 349 à 433.

78
phihag

Cette fonction a trouvé ici , fonctionne très bien pour moi

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

J'ai résolu mon problème en faisant ceci:

  • Le fichier .php est codé en ANSI. Dans ce fichier se trouve la fonction pour créer le fichier .json.
  • J'utilise json_encode($array, JSON_UNESCAPED_UNICODE) pour encoder les données;

Le résultat est un fichier .json encodé en ANSI en UTF-8.

27
Sheyla Fernandes

Utilisez JSON_UNESCAPED_UNICODE Dans json_encode() si votre version php> = 5.4.

7
Lakin Mohapatra