Ajax によってバックグラウンド PHP に送信される中国語の文字化けコードの解決策: 1. Set "iconv('utf-8','gb2312',$_POST['Data']);"; 2. Through arrayRecursive と JSON このメソッドはコーディングの問題を解決できます。
この記事の動作環境: Windows 7 システム、PHP バージョン 7.1、Dell G3 コンピューター。
ajaxからバックグラウンドphpに伝わる中国語の文字化け問題を解決するにはどうすればよいでしょうか?
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 ページはデータベースから通常の中国語の文字を読み取ります。 ~
データを返す場合は、何も処理せずに文字列の形式で直接データを返すだけです! これは問題ありません! すべてが正常に中国語で表示されます。フロントページに!
しかし、バックグラウンド データはあります。通常、パッケージ化する必要があります!そうしないと、フロント デスクで受け取ったデータの処理が困難になります!
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 ビデオ チュートリアル 」
以上がajaxからバックグラウンドphpに伝わる中国語文字化け問題の解決方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。