ThinkPHP の Get メソッドを通じて送信された中国語の文字化けの問題を解決
?
thinkPHP に出会ってからまだ数日しか経っていませんが、まだ着手していません。会社のプロジェクトが非常に緊急であるため、thinkPHP にも非常に興味があり、受講したいと思っています。もちろん、多くの問題がありましたが、幸いなことに、友人の gidot とインターネットと公式マニュアルの助けで、それらは基本的に解決されました。
ここ数日でまた問題が発生しました。それは、GET を送信すると漢字が文字化けするという問題です。フォーラムを読んだところ、多くの人がこの問題を抱えているようですが、良い解決策はありません。
データベース、ページエンコーディング、ファイルエンコーディングはすべてUTF8で問題ありません。
実行可能な方法を提供している人もいますが、私の環境が WIDNOWS2003+IIS6.0 でデフォルトの文字セットが中国語であることが原因かもしれません。あらゆる種類の方法を試しましたが、それでもうまくいきません。
後で、クライアントがリクエストを送信する前に Base64 エンコードし、その後サーバー上でリクエストを Base64 デコードすることが分かりました。試してみると、PHP の Base64 の結果は実際には JS の結果とは異なることがわかりました -_-||| 後で考えたのですが、base64 を使用すると、文字がエンコードされないよう文字に変換されるだけです。そしてまた何かが間違ってデコードされました。
この場合、自分で簡単なコーデックを作成することで解決できるはずです。試してみたところ、解決しました。
送信中にブラウザによってデータがエンコードされてサーバーの問題が発生するのを防ぐために、最初にクライアントから送信されたデータをエンコードします。それから、フォームの送信時に JS を使用して文字 encodeURI をエンコードします。記号「%」の内側には、エンコードされない他の文字を入れてください (この文字は特殊である必要があり、ユーザーが入力した文字と混同しないようにしてください。また、文字が混同されやすいことを考慮して、長すぎてもいけません)ユーザー入力)、3 文字「.s.」を選択しました)、フォームを送信させます。特定の実装:
?