ホームページ  >  記事  >  バックエンド開発  >  PHPでJSONデータを配列に変換すると文字化けが発生する

PHPでJSONデータを配列に変換すると文字化けが発生する

PHPz
PHPzオリジナル
2023-05-11 09:20:36561ブラウズ

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。