ホームページ >バックエンド開発 >PHPチュートリアル >PHP で Unicode 文字をエスケープせずに JSON を UTF-8 でエンコードするにはどうすればよいですか?

PHP で Unicode 文字をエスケープせずに JSON を UTF-8 でエンコードするにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-31 03:42:30323ブラウズ

How to Encode JSON in UTF-8 Without Escaping Unicode Characters in PHP?

Unicode 文字をエスケープせずに JSON を UTF-8 でエンコードする方法

PHP では、 json_encode() 関数は次のように値を JSON 文字列に変換します。ただし、デフォルトでは、Unicode 文字を Unicode コード ポイント表現にエスケープします。これは、出力に Unicode エンコードではなく UTF-8 エンコードが必要な特定のシナリオでは望ましくない可能性があります。

次の例を考えてみましょう:

<code class="php">$arr = ['a' => 'á'];
echo json_encode($arr);</code>

期待される出力は "a": "á " と表示されますが、実際の結果は {"a":"u00e1"} になります。これは、json_encode() 関数が文字「á」を Unicode コード ポイント表現 (「u00e1」) にエンコードしているためです。

解決策:

その間5.4 より前の PHP バージョンには、json_encode() で Unicode エスケープを無効にする組み込みオプションがありません。これを実現するには、次のような回避策があります。

  1. Roll Your Own JSON Encoder: 非 ASCII 文字をエンコードしないカスタム JSON エンコーダを作成します。
  2. Pear の JSON エンコーダを使用します: Pear JSON エンコーダを使用し、Unicode エスケープに関与する行 349 ~ 433 を削除します。 .
  3. PHP 5.4 の使用 : PHP 5.4 以降のバージョンでは、json_encode() 関数は、Unicode エスケープなしでプレーンな出力を可能にする JSON_UNESCAPED_UNICODE オプションを提供します。このオプションを使用した例を次に示します。
<code class="php"><?php
header('Content-Type: application/json');
$arr = ['a' => 'á'];
echo json_encode($arr, JSON_UNESCAPED_UNICODE);
?></code>

これにより、目的の JSON 文字列が出力されます: "a": "á".

以上がPHP で Unicode 文字をエスケープせずに JSON を UTF-8 でエンコードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。