ホームページ  >  記事  >  バックエンド開発  >  php json_encodeが文字化けする問題の解決方法

php json_encodeが文字化けする問題の解決方法

藏色散人
藏色散人オリジナル
2020-07-09 12:36:353784ブラウズ

php json_encode の文字化けの解決策: 最初にデータベース エンコーディングとページ エンコーディングを UTF8 に変更し、次に「json_encode」を使用して PHP の配列配列を JSON 文字列に変換し、最後に関数 urlencode を使用して処理します。

php json_encodeが文字化けする問題の解決方法

PHP json_encode 中国語文字化けの解決策

多くの人が Ajax を使用して、私が持っているバックグラウンドの PHP ページと対話していると思います。全員が漢字化けの問題に遭遇しました。 JSON は軽量なデータ交換形式として非常に人気がありますが、バックグラウンドの対話として PHP を使用すると、中国語の文字化けの問題が発生しやすくなります。 JSON は js と同じです。クライアント上の文字は UTF8 の形式で処理されます。つまり、送信および受信のデータ形式として JSON を使用する場合、文字は UTF8 でエンコードされます。ページのエンコードとデータベースの際には、文字が UTF8 でエンコードされます。 UTF8を使用すると、非常に中国語の文字化けが発生しやすくなります。解決策は当然、js または PHP で JSON データを処理するときに UTF8 を使用することです。

PHP5.2 以降では json_encode が組み込み関数として使用されており、Web サイト作成者にとって非常に便利ですが、json_encode は UTF8 でエンコードされた文字のみをサポートしていることに注意してください。またはnull値が表示されます。

解決策は次の 2 つのステップに分かれています。

Step1

JSON を処理するときに文字が UTF8 でエンコードされていることを確認します。具体的には、データベース エンコーディングとページ エンコーディングの両方を UTF8 に変更できます。もちろん、gbk エンコーディングを使用したい場合は、JSON 処理の前に文字を UTF8 に変換できます。 PHP には次のメソッドがあります。

 <?php  
      $data="JSON中文";  
      $newData=iconv("GB2312","UTF-8//IGNORE",$data);  
      echo $newData;  
      //ignore的意思是忽略转换时的错误,如果没有ignore参数,所有该字符后面的字符都不会被保存。  
      //或是("GB2312","UTF-8",$data);  
 ?>

Step2

バックグラウンド PHP ページ (ページが UTF-8 としてエンコードされているか、文字が UTF-8 に変換されている) は、json_encode を使用して変換します。 PHP の配列 array は JSON 文字列です。例:

 <?php  
     $testJSON=array(&#39;name&#39;=>&#39;中文字符串&#39;,&#39;value&#39;=>&#39;test&#39;);  
    echo json_encode($testJSON);  
 ?>

出力結果を次のように表示します:

{“name”:”\u4e2d\u6587\u5b57\u7b26\u4e32″,”value”:”test”}

UTF8 でエンコードされた文字が使用されていても、json_encode を使用すると中国語の文字化けが発生することがわかります。解決策は、 json_encode を使用する前に urlencode() 関数を使用して文字を処理し、その後 json_encode して、結果を出力するときに urldecode() 関数を使用して文字を変換し直すことです。詳細は次のとおりです。

 <?php  
     $testJSON=array(&#39;name&#39;=>&#39;中文字符串&#39;,&#39;value&#39;=>&#39;test&#39;);  
     //echo json_encode($testJSON);  
     foreach ( $testJSON as $key => $value ) {  
         $testJSON[$key] = urlencode ( $value );  
     }  
     echo urldecode ( json_encode ( $testJSON ) );  
 ?>

出力結果を次のように確認します。

{“name”:”中文字符串”,”value”:”test”}

この時点で、中国語の文字は正常に出力されています。 json_encode を自由に使用してください。このようにすると、フロントエンド JavaScript で Ajax が eval を受信したときに、PHP バックグラウンドで出力される JSON 文字列が中国語で文字化けすることはありません。これは、js も JSON 形式のデータを PHP と同様の UTF8 形式で処理するためです。 PHP ページを受信します。JSON 文字列は問題を引き起こしません。

その他の関連記事については、PHP 中国語 Web サイト をご覧ください。

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

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