PHP json_encode 関数が UTF-8 文字列を 16 進エンティティに変換する: その理由と解決方法
PHP json_encode 関数は PHP 変数をエンコードできますJSON (JavaScript Object Notation) に変換します。ただし、UTF-8 エンコードで Unicode 文字を扱う場合、関数はデフォルトで文字を 16 進エンティティに変換する場合があります。これは、JSON が非 ASCII 文字を表すマルチバイト文字である UTF-8 文字をネイティブにサポートしていないためです。
なぜ PHP は UTF-8 文字列を 16 進エンティティに変換するのですか?
PHP の json_encode 関数は JSON 仕様を使用します。この仕様では、ASCII 文字として表現できない Unicode 文字は 16 進エスケープ シーケンスを使用してエンコードする必要があると規定されています。これにより、UTF-8 をサポートしていない可能性のある古いアプリケーションやデバイスとの互換性が確保されます。
変換の問題の解決
この問題を解決し、UTF-8 の変換を回避するには文字列を 16 進エンティティに変換するため、PHP はバージョン 5.4.0 で JSON_UNESCAPED_UNICODE オプションを導入しました。このオプションは、非 ASCII 文字の 16 進エスケープ シーケンスの代わりに Unicode コード ポイントを使用するように json_encode に指示します。
例
次の PHP スクリプトがあるとします。
<code class="php"><?php $text = "База данни грешка."; echo json_encode($text); ?></code>
このコードは、キリル文字が 16 進エンティティとしてエンコードされた次の JSON 文字列を出力します。
<code class="json">"\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u0438 \u0433\u0440\u0435\u0448\u043a\u0430."</code>
UTF-8 文字を直接出力するには、JSON_UNESCAPED_UNICODE オプションを使用できます。
<code class="php"><?php $text = "База данни грешка."; echo json_encode($text, JSON_UNESCAPED_UNICODE); ?></code>
これにより、次の JSON 文字列が生成されます。キリル文字は Unicode コード ポイントを使用して表現されます。
<code class="json">"База данни грешка."</code>
以上がPHP の json_encode 関数が UTF-8 文字列を 16 進エンティティに変換するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。