In article <4AA5EA67.1040504 / airemix.jp>,
  "NARUSE, Yui" <naruse / airemix.jp> writes:

>> decodeURI は、encodeURI が生成する %-encoding はすべて解きま
>> すが、そうでない %-encoding を一部解かないことがあるようです
>> が、これは何の役に立つのかなぁ?
>> (例えば、decodeURI("%40") が "%40" になるとか。)
>
> どうも、encodeURI/decodeURI はオレオレ IRI と URI を
> 相互変換するためのもののようで、引数や結果に一定の仮定が
> あるように見えます。
>
> 例えば、userinfo に @ が含まれている場合、
> それを解いちゃうと解いた結果が IRI っぽい何か的にまずい、とか。

encodeURI("@") は "@" なので、encodeURI は %40 を生成しない
んですよねぇ。

js> encodeURI("@")
@

だから、%40 があるとしたら、それは encodeURI 以外から来たも
のであるはずです。そうすると、それはどういう状況なのかなぁ、
という疑問なんですが。

>> encodeURIComponent は基本的な考え方としては悪くないと思いま
>> す。! などがそのままなのは甘いと思いますが、古い RFC の影響
>> でしょうね。今だったら unreserved 以外を一律に %-encoding に
>> してしまうのがいいでしょう。
>
> HTML5 の 4.10.16.4 URL-encoded form data を見ると、
> それに近い動きを言っていますね。
> http://www.whatwg.org/specs/web-apps/current-work/#application/x-www-form-urlencoded-encoding-algorithm
> SP を + に置換してたりはしますが。

これはこれで謎だなぁ。
reserved のひとつである * はそのままにするのに
unreserved のひとつである ~ は %7E にするという理由は理解で
きません。

あと、U+0041 LATIN CAPITAL LETTER A to U+005A LATIN CAPITAL
LETTER Z representing the hexadecimal value というのは間違い
でしょうな。16進の終わりは Z じゃなくて F でしょう。

>> あるいは、URI.escape_html_form([[k1, v1], [k2, v2], ...]) と
>> いうメソッドが、application/x-www-form-urlencoded に従って
>> (エスケープして) k1=v1&k2=v2&... という形式を生成するメソッ
>> ドだとすると、k, v の中では、query に使えない文字と =,&  を
>> エスケープすることになります。(あと + と ; もかな)
>
> これも必要だとは思うのですが、
> 名前は www_form_urlencode の方がよくありませんか。
> www_ は取ってもいいかもしれませんが。

html という語を入れたのは URI の世界から見ると HTML でない
form もあり得る、という意図です。(-1)

multipart/form-data でないという意味が表現できているのはいい
ですね。(+1)

あと、URI.form_urlencode は URI.escape_html_form より短いの
もいいですね。(+1)

でも URI と url が重なるのはイヤかな。(-1)

(計0)

> あと、値が String か String の Array な Hash も引数に取れるとか。
> # 多くの場合 CGI 等への引数は Hash で得ることができるので、
> # それを再度このメソッドに投げ込みたい、とか

そのへんはあいまいにならない範囲で便利に受け付ければいいんじゃ
ないでしょうか。

[[k1, v1], [k2, v2], ...] の形式を書いたのはこれがなんでも表
現できるプリミティブだからで、それ以外の形式を受け付けるべき
でないという意図があるわけではありません。
-- 
[田中 哲][たなか あきら][Tanaka Akira]