[PHP-users 32032] Re: php+mysql+PrototypeをEUC-JP環境で運用したい。
KUBO Tetsuro
kubo @ calico.co.jp
2007年 4月 26日 (木) 18:20:15 JST
久保です。
PEARやPrototype.jsを使わず、自作のライブラリを使って同じことをやってい
ますが、文字化けは起きていません。クライアント側、サーバー側ともにEUC
のphpで処理し、DBはEUCのPostgreSQLを使っています。
私の場合は
クライアント EUC
↓
↓テキストデータ UTF-8
↓
サーバー EUC
↓
↓xml UTF-8
↓
クライアント EUC
という処理をしています。
クライアント側プログラムではフォームの値をJavaScriptで非同期的に取得。
encodeURIComponent を通してURIエンコードし、それをサーバー側の受けプロ
グラムにPOST形式で渡しています。encodeURIComponent を通すと、元の文字
コードが何であれUTF-8にエンコードされました。
サーバー側で受けるプログラムでは、まず受け取ったデータをUTF-8からEUCに
変換してEUCのデータベースに問い合わせ、結果を整形したXMLをUTF-8に変換
して返しています。
XMLを受け取ったクライアント側ではgetElementsByTagNameでXMLの要素を
JavaScriptの配列として取得して処理しています。サーバーからクライアント
への戻りをXMLではなくテキストで戻すなら、途中をURIエンコードして橋渡し
する必要があります。
なお、クライアントでサーバーから戻ってきたデータを処理するときはUTF-8
からEUCに変換しなくても文字化けしませんでした。このあたりは勉強不足で
よく分かっていませんが、結果オーライということで使ってます。
ということでプログラム的にはできることだと思いますが、PEAR、
Prototype.jsを使う場合はよく分かりません。自作の場合は数十行のスクリプ
トですみました。あまりお役に立てなさそうですが、参考まで。
一点だけ
> // Ajax処理後に動作するプログラム
> function ajaxReturn(request) {
> alert(request.responseText);
> }
とありますが、responseTextはURIエンコードされていると思われるので、
decodeURIComponent してみてはいかがでしょう。
PHP-users メーリングリストの案内