PHP で Unicode 文字を使用した JSON のエンコードとデコード
PHP で Unicode 文字を含む JSON 文字列を処理する場合、課題が生じる可能性があります。この記事では、このような文字列をデコードおよびエンコードするときによく発生する問題について説明します。
Unicode 文字のデコード
Unicode 文字を使用して JSON をデコードするには、文字が次の場合に問題が発生する可能性があります。正しくエンコードされていません。 JSON 仕様では、二重引用符、バックスラッシュ、制御文字を除くすべての Unicode 文字が許可されます。ただし、特定の Unicode 文字は、Python やその他のプログラミング言語では正しくデコードされない場合があります。
Unicode 文字のエンコード
JSON を Unicode 文字でエンコードすると、結果が次のようにエンコードされる場合があります。エスケープされた Unicode シーケンス。これは JSON 仕様に従って有効です。ただし、元の Unicode 文字をエスケープされていない形式で保持したい場合があります。
unescaped_unicode オプションの使用
PHP 5.4 では、json_encode() に JSON_UNESCAPED_UNICODE オプションが導入されました。 Unicode 文字をエスケープせずにエンコードする機能。ただし、PHP 5.3 を使用している場合、このオプションは使用できません。
PHP 5.3 の代替ソリューション
PHP 5.3 の場合は、正規表現ベースのエンコードされた Unicode シーケンスをエスケープ解除するアプローチ。これを行う 1 つの方法は次のとおりです。
<code class="php">$pattern = '/"\\u([0-9a-fA-F]{4})"/'; $replaced = preg_replace($pattern, '"\u"', $encodedJson);</code>
この正規表現は、「uXXXX」の形式でエスケープされた Unicode シーケンスを検索し、エスケープされていない Unicode 文字に置き換えます。
例コード
JSON 文字列を Unicode 文字でエンコードし、デコード中にエスケープ解除するには、次のコードを使用できます:
<code class="php">$data = ['Tag' => 'Odómetro']; $encodedJson = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); $decodedData = json_decode($encodedJson, true); print_r($decodedData); // Output: [Tag] => Odómetro</code>
以上がPHP で Unicode 文字を使用して JSON をエンコードおよびデコードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。