2008年10月24日金曜日

Shift_JIS で encodeURIComponent

Ajax が流行り始めてからほとんど UTF-8 でウェブアプリケーションを作っていたので気にならなかったのですが、Shift_JIS で作るとなるとちょっと面倒くさいです。

例えば script.aculo.us の Ajax.InPlaceEditor のコールバックとかで普通に書くと encodeURIComponent が UTF-8 エンコードを施すので、サーバ側で Shift_JIS として受け取れません。
new Ajax.InPlaceEditor(e, "/example/modify_text", {
callback: function(f, v) {
return "text=" + encodeURIComponent(v);
},
ajaxOption: {method: "post"}
}


そこで思いついたのが encodeURIComponent を 2回行う方法。これでサーバ側で個別にデコードしてやれば良いです。JavaScript を使って日本語パラメータを送信する必要があるところだけです。
new Ajax.InPlaceEditor(e, "/example/modify_text", {
callback: function(f, v) {
return "double_encoded_text=" + encodeURIComponent(encodeURIComponent(v));
},
ajaxOption: {method: "post"}
}


他に方法あるのかなぁ。。

0 件のコメント: