Tsutomu Yano
benbr****@mac*****
2008年 5月 5日 (月) 02:22:16 JST
矢野です。 Wicket-ja-user 83にて、AjaxButtonがencodeURIComponent()にてデータをエンコードして送信するにも 関わらず、WicketがUTF-8でデコードしないケースがある件をバグ報告しましたが、本日バグ報告が更新され、 1.3.4で修正予定となりました。 それでバグレポートに以下の質問が投げかけられました。 >> i can apply this patch just fine, i am just thinking will it always be true? for example i see that we use an if: if (encodeURIComponent) { return encodeURIComponent(text); } else { return escape(text); } then we just escape() what happens then? Or is that encode always used? << >翻訳> このパッチは適用できそうだね。ところで、このパッチで使われている条件は常に真なの かどうか考えあぐねてるんだ。例えば僕らは(AjaxButtonのエンコード処理で)次のような if文をつかってるんだけど。 (ここに上記コード) ケースによってescape()を使うよね。 この場合なにが起こるのかな?それともencodeURIComponentが常に使われると思っていいの かな? << まあ、いまどきencodeURIComponentもサポートしてないブラウザを使うなという気もするのですが、 ロジック的にはescape()が使われる可能性もあります。で回答をしたいので、みなさんに回答案が 的確であるかどうか教えてほしいです。 回答としては、 ・escape/unescapeの動作は仕様化されておらず、ブラウザによって動作が違う ・もっとも数が多いと思われるIEは、独自の特別な方法でエンコードを行うため、IEのunescape以外 ではデコードできない。サーバー側でこれを正しくデコードすることはほぼ無理と思っていい。 ・そのため日本のようなマルチバイト圏では、escape/unescapeは決して使わない。 ・encodeURIComponentでエンコードした値はJavaのURLDecoderで確実にデコードできる ・よってマルチバイト圏の意見としては、encodeURIComponentだけを使うべき ・しかしencodeもシングルバイトでは正しく動作するので、シングルバイト圏のユーザの利便性のために encodeを残した方がgoodだろう。 ・マルチバイト圏はencodeURIComponentをサポートしないブラウザはAjaxを使う場合にはサポート対象外と することで対応するだろう。 という感じで考えています。どうでしょうか? --------------------------------------------------- 矢野 勉(やの つとむ) 電子メール:benbrand_at_mac.com ---------------------------------------------------