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":"á"}
{"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.
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));
}
J'ai résolu mon problème en faisant ceci:
json_encode($array, JSON_UNESCAPED_UNICODE)
pour encoder les données;Le résultat est un fichier .json encodé en ANSI en UTF-8.
Utilisez JSON_UNESCAPED_UNICODE
Dans json_encode()
si votre version php> = 5.4.