「特殊な」Unicode 文字を組み込むと、JSON にエンコードされた後に歪んで表示されることがよくあります:
echo json_encode(['foo' => '馬']); // Output: {"foo":"\u99ac"}
これが起こる理由を理解するには、重要。
JSON エンコーディング標準
JSON エンコーディングは、ECMAScript (旧称 JavaScript) 文字列リテラル形成 (セクション 7.8.4) を利用します。これにより、文字を、接頭辞「u」の後にコード ポイントを表す 4 つの 16 進数が続く 16 進数として表すことができます。
"\u99ac"
この表現は、文字列リテラル「馬」と同一であり、同じ Unicode を伝えます。準拠した JSON パーサーによって解析されたときの文字。
PHP の JSON エンコーディングPreference
PHP の json_encode 関数は、多くの場合、「u....」エスケープ シーケンスを使用して非 ASCII 文字をエンコードします。これはオプションですが、有効な JSON が生成されます。
エンコーディングのカスタマイズ
必要に応じて、PHP 5.4 で導入された JSON_UNESCAPED_UNICODE フラグにより、リテラル文字エンコーディングが可能になります。
echo json_encode(['foo' => '馬'], JSON_UNESCAPED_UNICODE); // Output: {"foo":"馬"}
このカスタマイズはむしろ好みであることに注意することが重要ですUnicode 文字を JSON で送信する必要はありません。
以上がJSON エンコード後に特殊な Unicode 文字が歪んで表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。