PHP 開発では、JSON データ処理が一般的なタスクになっています。特に、フロントエンドと対話したり、サードパーティ API に接続したりする場合、JSON が最も一般的なデータ形式になることがよくあります。
PHP を使用して JSON データを処理する際、JSON データが配列に変換されて文字化けが発生することがあります。この記事では、この理由とその修正方法について説明します。
1. 文字化けしたコードが表示されるのはなぜですか?
PHPでは、json_decode()関数でJSONデータを配列に変換するのが一般的な操作方法です。ただし、JSON データに中国語が含まれている場合、変換された配列内の中国語が文字化けする可能性があります。
これは、PHP で使用されるデフォルトの文字セットが UTF-8 ではなく ISO-8859-1 であるため、UTF-8 エンコード形式の中国語文字を正しく認識できず、文字化けが発生するためです。
2. 解決策
1. json_decode() 関数の 2 番目のパラメーターを使用する
json_decode() 関数は、JSON データを配列に変換するだけでなく、次のことも行うことができます。 2 番目のパラメーターを追加して、JSON 文字列のエンコード形式を指定します。
たとえば、JSON データが UTF-8 でエンコードされている場合は、次のコードで指定できます:
$result = json_decode($json, true, JSON_UNESCAPED_UNICODE);
その中で、3 番目のパラメーター JSON_UNESCAPED_UNICODE は、中国語の文字をエスケープしないように PHP に指示します。ただし、直接的には元の UTF-8 エンコーディングを保持します。
2. ISO-8859-1 文字セットを UTF-8 文字セットに変換する
もう 1 つの解決策は、ISO-8859-1 文字セットを UTF-8 文字セットに変換することです。これは、iconv() 関数または mb_convert_encoding() 関数を使用して実現できます。
たとえば、iconv() 関数を使用すると、次のように記述できます。
$result = json_decode(iconv("ISO-8859-1", "UTF-8//IGNORE", $json), true);
このうち、2 番目のパラメータ「UTF-8//IGNORE」は、iconv() 関数にエンコードを指示します。 ISO-8859-1 文字は UTF-8 エンコーディングに変換されます。
3. エンコード形式ステートメントを PHP ファイルに直接追加します
PHP ファイルの先頭に次のコードを追加します:
header("Content-type:text/html;charset=utf-8");
これにより、文字を指定できます。中国語の文字が正しく認識されるように、PHP ファイルを UTF -8 エンコードとして設定します。
概要:
PHP で JSON データを処理するときに文字化けが発生した場合でも、パニックにならないでください。json_decode() 関数の 2 番目のパラメーターを追加するか、ISO-8859- 1 エンコーディングを UTF-8 エンコーディングに変更するか、PHP ファイルの先頭に文字セット宣言を追加して問題を解決します。
以上がPHPでJSONデータを配列に変換すると文字化けが発生するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。