ホームページ  >  記事  >  バックエンド開発  >  PHP アプリケーションの Ajax が文字化けを返した場合はどうすればよいですか?

PHP アプリケーションの Ajax が文字化けを返した場合はどうすればよいですか?

coldplay.xixi
coldplay.xixiオリジナル
2020-07-11 14:49:571970ブラウズ

PHP アプリケーション Ajax によって返される文字化けしたコードの解決策: 1. 受信したデータを GBK に変換し直します。コードは [iconv(utf-8,'gb2312'$_POST[Data])]; 2 です。 JSON を使用して送信します。コードは [$json_string=JSON($data)] です。

PHP アプリケーションの Ajax が文字化けを返した場合はどうすればよいですか?

PHP アプリケーション Ajax によって返される文字化けしたコードの解決策:

1. フロントからデータを送信する-end JS to バックグラウンド状況で

#AJAX データが送信されるとき、基礎となる xmlHttprequest を直接使用する場合でも、データ送信に jQuery の ajax を使用する場合でも、ajax は utf-8 を使用してエンコードして送信します。

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

GB2312 であれば、問題が発生します! GBK は UTF- で変換されます。このときバックグラウンドで直接受信したものは文字化けします!

解決策: バックグラウンド言語が 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 形式であり、漢字も正常です!

関連学習の推奨事項:

初心者から上級者までの PHP プログラミング

以上がPHP アプリケーションの Ajax が文字化けを返した場合はどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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