[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 メーリングリストの案内