[Wicket-ja-user 91] 意見募集:AjaxButtonがShift_JISを正しくデコードしないバグの修正の件

Back to archive index

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




Wicket-ja-user メーリングリストの案内
Back to archive index