PHPでJSON出力時に中国語が文字化けする問題を解決する方法

PHPz
リリース: 2023-04-25 17:40:44
オリジナル
2028 人が閲覧しました

近年、インターネット技術の急速な発展に伴い、フロントエンドとバックエンドを分離する開発モデルがますます多くの開発者に選ばれるようになりました。問題はますます増えており、特によくある問題の 1 つは、バックエンドで json 形式のデータを出力するとき、特にバックエンド言語として PHP を使用する場合に文字化けする問題です。

1. 問題の内容

PHP を使用して json 形式のデータを出力する場合、中国語の文字化けの問題が頻繁に発生します。たとえば、次のコードを使用します。

<?php

header(&#39;Content-type: application/json; charset=UTF-8&#39;);

$data = array(&#39;name&#39; => '张三', 'age' => '20');

echo json_encode($data);

?>
ログイン後にコピー

出力結果は次のようになると予想します。

{"name": "张三", "age": "20"}
ログイン後にコピー

しかし、実際には、出力結果の中国語部分が束になっていることがわかります。文字化けの数:

{"name": "\u5f20\u4e09", "age": "20"}
ログイン後にコピー

2. 問題分析

なぜこのような文字化けコードが表示されるのでしょうか?これは、json 内の漢字の処理ルールが原因で発生します。

json では、英語以外の文字は Unicode エスケープ シーケンスを使用してエスケープされます。具体的には、文字は \u に対応する Unicode エンコードを加えたもので表されます。

たとえば、文字「Zhang」の Unicode エンコードは「U 5F20」、つまり「\u5F20」です。

したがって、 json_encode を使用して php で配列をエンコードすると、 json_encode は中国語の文字を Unicode エスケープ シーケンス、つまり "\u と対応する Unicode エンコーディング" の形式にエスケープします。

json データを出力するときに正しい文字セットが指定されていない場合、ブラウザは解析時にデフォルトの文字セットに従って解析するため、中国語の文字化けが発生します。

3. 解決策

中国語の文字化けの原因が分かれば、対応する解決策を使用してこの問題に対処できます。

一般的に使用される解決策には次のようなものがあります。

  1. ヘッダーに文字セットを指定する

指定する JSON データ情報を出力する前にヘッダーを設定できます。 UTF-8 を例として、次のコードを使用できます:

header('Content-type: application/json; charset=UTF-8');
ログイン後にコピー
  1. json_encode 関数でパラメータを設定します

json_encode 関数のパラメータ 使用する文字セットを示すパラメータを追加します。UTF-8 を例として、次のコードを使用できます。

echo json_encode($data, JSON_UNESCAPED_UNICODE);
ログイン後にコピー
  1. php.ini で php のデフォルトの文字セットを設定します。

php.ini の構成を変更し、デフォルトの文字セットを UTF-8 に設定して、JSON データを出力するときに正しい文字セットが使用されるようにすることもできます。

default_charset = 'UTF-8'
ログイン後にコピー

つまり、どの方法を使用する場合でも、中国語の文字化けの問題を回避するには、json データを出力するときに正しい文字セットが使用されることを確認する必要があります。

4. まとめ

PHP を使用して json データを出力する際に​​中国語の文字化けが発生する場合は、次の点を確認する必要があります。設定が正しいか ヘッダー情報の文字セットが正しく設定されているか

    json_encode関数の文字セットパラメータが正しく設定されているか
  1. php.iniのデフォルトの文字セットが正しく設定されているか;
  2. すべての面で文字セットが正しく設定されていることを確認することによってのみ、中国語の文字化けの問題を効果的に回避し、出力された json データを正常に解析できるようになります。

以上がPHPでJSON出力時に中国語が文字化けする問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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