ホームページ >バックエンド開発 >PHPの問題 >php ajaxで中国語文字化けが発生した場合はどうすればよいですか?

php ajaxで中国語文字化けが発生した場合はどうすればよいですか?

藏色散人
藏色散人オリジナル
2021-09-14 11:17:032371ブラウズ

php ajax で中国語の文字化けを取得する解決策: 1. 「iconv('utf-8','gb2312',$_POST['Data']);)」コードを実行します; 2. データベースからPHP経由 漢字を読み取ってjson形式に変換するだけです。

php ajaxで中国語文字化けが発生した場合はどうすればよいですか?

#この記事の動作環境: Windows7 システム、PHP7.1 バージョン、DELL G3 コンピューター

php ajaxで中国語文字化けが発生する場合は?

PHP の AJAX アプリケーションにおける中国語の文字化けの解決方法

Web アプリケーション開発では中国語の文字化けがよく発生します!

今日は、主にアイデアを整理します:

文字化けが発生するケースのほとんどは、AJAX を実行するときに遭遇するものです!データベースから直接読み取る場合はコーディングの問題が発生しないためです~

1. フロントエンド JS からバックエンドにデータを送信するとき

AJAX データが送信されるとき、基礎となる xmlHttprequest を直接使用するか、jQuery の ajax を使用するかに関係なく、ajax は utf- 8 をエンコードして送信します!

ページが UTF-8 であれば問題ありません! 渡された中国語データは文字化けしません!

GB2312 の場合は問題が発生します! GBK を UTF-8 に変換してバックグラウンドに送信すると、バックグラウンドで直接受信したデータが文字化けします!

(解決策: バックグラウンド言語が PHP の場合、iconv('utf-8','gb2312 ',$_POST['Data ']);)

原理は非常に単純です。バックグラウンドでの直接受信は utf-8 で、ページはすべて GBK であり、受信したデータを変換して戻すだけです。 GBK!

この時点ではデータベース操作を行ってください!データベースに保存されるものは通常の中国語文字である必要があります!

2. 背景ページには、データが保存されていることが示されています。データベースには漢字が含まれています。この時点で JS フロント デスクに送り返される文字です。

PHP ページはデータベースから通常の漢字を読み取り、AJAX 経由で送り返したいと考えています~

それが返された場合、データは何も処理せずに文字列の形式で直接返されます! これは問題ありません! 中国語のすべてが通常どおりフロント ページに表示されます!

しかし、私たちは通常、バックグラウンド データをパッケージ化する必要があります! そうしないと、フロント デスクで受信したデータが扱いにくくなります!

PHP の場合は、通常は JSON を使用して送信します! このように、フロントエンド JS に渡されるデータは、解凍して操作するのが非常に簡単です!

PHP バックグラウンドで json 変換操作を実行するときに問題が発生します!

json を変換すると、次のことがわかります。データベースから読み取った中国語に NULL またはその他の異常な状態が表示されます。これは、JSON がエンコーディングのみをエスケープするためです! どのようなエンコーディングをエスケープするかは気にしません!

とにかく、JSON は中国語に変換すると文字化けします~~

解決策は次のとおりです:

function arrayRecursive(&$array, $function, $apply_to_keys_also = false)
 {
     static $recursive_counter = 0;
     if (++$recursive_counter > 1000) {
         die('possible deep recursion attack');
     }
     foreach ($array as $key => $value) {
         if (is_array($value)) {
             arrayRecursive($array[$key], $function, $apply_to_keys_also);
         } else {
             $array[$key] = $function($value);
         }
   
         if ($apply_to_keys_also && is_string($key)) {
             $new_key = $function($key);
             if ($new_key != $key) {
                 $array[$new_key] = $array[$key];
                 unset($array[$key]);
             }
         }
     }
     $recursive_counter--;
 }
 function JSON($array) {
     arrayRecursive($array, 'urlencode', true);
     $json = json_encode($array);
     return urldecode($json);
 }
$json_string=JSON($data);
//$obj = json_decode($json_string);
print_r($json_string);

これらの処理後、バックグラウンド PHP によってデータベースから読み取られた中国語の文字が正常に json に変換されたことがわかります。形式も中国語表示も正常です!

もちろんこの時フロントが受け取るデータはJSON形式で中国語表示も正常です!

わかりました~~これらがアイデアです~オンラインには多くの方法があります!少し混乱します~重要なことはアイデアを覚えておくことです!

それから、どの関数を使用するかによって異なります。関連する問題を解決するには、任意の方法を使用してください。エンコーディングの問題!

JS フロントエンド AJAX をトランスコードする必要があるのは面倒です! そしてバックグラウンドでデコードされます! 一部のものは 2 回トランスコードする必要さえあります!

私が今書いていることは次のとおりですPHP バックグラウンド言語コードの場合はすべて有効です。

フロント デスクの GBK であっても、トランスコーディング操作には使用されません。関連するすべての変換は、バックグラウンドの PHP コードでのみ行われます。!!

推奨される学習: 「

PHP ビデオ チュートリアル

以上がphp ajaxで中国語文字化けが発生した場合はどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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