web-dev-qa-db-ja.com

PHP `json_encode`でUnicodeではなくUTF-8をエンコードして返す方法はありますか?

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":"á"}_

43
Binyamin

{"a":"\u00e1"}および{"a":"á"}は、同じJSONドキュメントを記述するさまざまな方法です。 JSONデコーダーはUnicodeエスケープをデコードします。

Php 5.4以降では、phpのjson_encodeにはJSON_UNESCAPED_UNICODEプレーン出力のオプション。古いPHPバージョンでは、非ASCII文字をエンコードしない独自のJSONエンコーダーを展開するか、 Pear's JSONエンコーダーを使用して、349行目から433行目を削除できます。

78
phihag

この関数は 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));
}
31
antoniom

私はこれをして問題を解決しました:

  • .phpファイルはANSIにエンコードされます。このファイルには、.jsonファイルを作成する関数があります。
  • json_encode($array, JSON_UNESCAPED_UNICODE)を使用してデータをエンコードします。

結果は、UTF-8としてANSIにエンコードされた.jsonファイルです。

27

使用しているphpバージョンが5.4以上の場合は、json_encode()内でJSON_UNESCAPED_UNICODEを使用します。

7
Lakin Mohapatra