ホームページ  >  記事  >  バックエンド開発  >  ThinkPHP の Get モードで送信された中国語の文字化けの問題を解決する

ThinkPHP の Get モードで送信された中国語の文字化けの問題を解決する

WBOY
WBOYオリジナル
2016-06-13 13:09:061059ブラウズ

ThinkPHP の Get メソッドを通じて送信された中国語の文字化けの問題を解決

?

thinkPHP に出会ってからまだ数日しか経っていませんが、まだ着手していません。会社のプロジェクトが非常に緊急であるため、thinkPHP にも非常に興味があり、受講したいと思っています。もちろん、多くの問題がありましたが、幸いなことに、友人の gidot とインターネットと公式マニュアルの助けで、それらは基本的に解決されました。

ここ数日でまた問題が発生しました。それは、GET を送信すると漢字が文字化けするという問題です。フォーラムを読んだところ、多くの人がこの問題を抱えているようですが、良い解決策はありません。
データベース、ページエンコーディング、ファイルエンコーディングはすべてUTF8で問題ありません。
実行可能な方法を提供している人もいますが、私の環境が WIDNOWS2003+IIS6.0 でデフォルトの文字セットが中国語であることが原因かもしれません。あらゆる種類の方法を試しましたが、それでもうまくいきません。

後で、クライアントがリクエストを送信する前に Base64 エンコードし、その後サーバー上でリクエストを Base64 デコードすることが分かりました。試してみると、PHP の Base64 の結果は実際には JS の結果とは異なることがわかりました -_-||| 後で考えたのですが、base64 を使用すると、文字がエンコードされないよう文字に変換されるだけです。そしてまた何かが間違ってデコードされました。
この場合、自分で簡単なコーデックを作成することで解決できるはずです。試してみたところ、解決しました。

送信中にブラウザによってデータがエンコードされてサーバーの問題が発生するのを防ぐために、最初にクライアントから送信されたデータをエンコードします。それから、フォームの送信時に JS を使用して文字 encodeURI をエンコードします。記号「%」の内側には、エンコードされない他の文字を入れてください (この文字は特殊である必要があり、ユーザーが入力した文字と混同しないようにしてください。また、文字が混同されやすいことを考慮して、長すぎてもいけません)ユーザー入力)、3 文字「.s.」を選択しました)、フォームを送信させます。特定の実装:

プログラムコード
id="search1"?action="__URL__">
id="group_name"?title="グループ名のクエリ" class="medium" >
click="getId('group_name').value=encodeURI(getId('group_name').value).replace(/%/g 、'.s.');

getId('search1').submit();"class="search imgButton" value="query" style="impBtn hMargin f左影" />


次に、エンコードされたデータを通常のデータにデコードする関数をサーバー側で作成します。
プログラムコード

//GET 値をデコード
関数 get ChineseGetValue($key){
if (strlen($key)>0){
??return?urldecode(str_replace('.s.','%',$key));
}
}



次に、パラメーター クエリを受信したときにデコードする必要があります:
プログラムコード
$map['group_name'] = array('like',"%".get ChineseGetValue($_GET['group_name'])."%");

最後に、GET 値がページに表示されるときに、それもデコードする必要があります:
プログラムコード


$Think.get.group_name|get ChineseGetValue}" type="text" name="グループ名" id="グループ名" title="グループ名のクエリ" class="medium" >




以上です。この投稿が、この問題を抱えている子供たちの靴に役立つことを願っています。
余談ですが、 getId は私が怠惰のために使用する JS 関数です (それほど苦労せずに document.getElementById を書くことができます...)。コードは次のとおりです:
プログラムコード
関数 getId(id){
return document.getElementById(id);
}

?

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