UnicodeではなくUTF-8をエンコードしてPHP _json_encode
_)を返す方法はありますか?
_$arr=array('a'=>'á');
echo json_encode($arr);
_
mb_internal_encoding('UTF-8');
と$arr=array_map('utf8_encode',$arr);
は修正しません。
結果:_{"a":"\u00e1"}
_
期待される結果:_{"a":"á"}
_
{"a":"\u00e1"}
および{"a":"á"}
は、同じJSONドキュメントを記述するさまざまな方法です。 JSONデコーダーはUnicodeエスケープをデコードします。
Php 5.4以降では、phpのjson_encode
にはJSON_UNESCAPED_UNICODE
プレーン出力のオプション。古いPHPバージョンでは、非ASCII文字をエンコードしない独自のJSONエンコーダーを展開するか、 Pear's JSONエンコーダーを使用して、349行目から433行目を削除できます。
この関数は here を見つけました。
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));
}
私はこれをして問題を解決しました:
json_encode($array, JSON_UNESCAPED_UNICODE)
を使用してデータをエンコードします。結果は、UTF-8としてANSIにエンコードされた.jsonファイルです。
使用しているphpバージョンが5.4以上の場合は、json_encode()
内でJSON_UNESCAPED_UNICODE
を使用します。