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"}
}


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

2008年10月17日金曜日

mod_ktai を試しました

避けてきた携帯3キャリアの絵文字対応をすることになりました。

色々さがして mod_ktai を試しましたが、3つの不満点が・・・

1) 入力のフィルタはしてくれない
2) UTF-8 での閉じるダブルコーテーションが外れるバグ
3) ダブルコーテーションバグを回避しようとして、UTF-8 で提供している他のサービスと分けて、VirtualHost 内に AddOutputFilterByType を記述してみたら、docomo 用のレスポンスヘッダ application/xhtml+xml に反応しないんです。
そこで次のようにタイプを追加したら、docomo 端末でアクセスしても何故か PC 用の絵文字画像に変換されてしまう><
LoadModule ktai_emoji_module modules/mod_ktai_emoji.so
KtaiEmojiConvertMode auto
KtaiEmojiConvertNativeEmojiDocomo 0
KtaiEmojiEnableAddGuidOn 0
KtaiEmojiHasIconFile 1
KtaiEmojiIconDir /img/emoji

<VirtualHost *:80>
ServerName example.com
AddOutputFilterByType KTAI_EMOJI_OUTPUT_FILTER text/html application/xhtml+xml
</VirtualHost>


おしい。