ホームページ > バックエンド開発 > PHPチュートリアル > PHP の json_encode 関数が UTF-8 文字列を 16 進エンティティに変換するのはなぜですか?

PHP の json_encode 関数が UTF-8 文字列を 16 進エンティティに変換するのはなぜですか?

Patricia Arquette
リリース: 2024-11-02 19:32:30
オリジナル
489 人が閲覧しました

Why Does PHP's json_encode Function Convert UTF-8 Strings to Hexadecimal Entities?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート