From: "NARUSE, Yui" Date: 2009-09-08T11:56:21+09:00 Subject: [ruby-dev:39254] Re: Is URI.decode() broken? Tanaka Akira wrote: >> で、URI.build( .. ).to_s を基本とし、警告で誘導するとか。 > > 個人的に URI.build を使った経験がないんですが、よくある用法 > に合ってるんですかねぇ? 現状ではあっていませんね。 host や path はエスケープ済みでなければいけませんし、 query も結合済みでないといけないので。 > とりあえず Google Code Search ではひとつ使っているところがあ > りましたが、とても少ない気がします。 よくある用法では、protocol-host-path あたりまでは、 いきなり文字列として湧いて出て来ているような気がします。 今回の話はその否定から始まっているのでどうなんでしょうね。 この部分について一定の仮定を置けるならば、また別のAPIの余地がありますが。 > 私は、非ASCII な URI を使った覚えがあまりありません。 > (query 部分に使ったことは何回かある気がしますが。) > > そのため、用法を想像することが私には困難です。いきなりその二 > つが必要だといわれてもなんとも。 多言語ドメイン以外だと、実質的に query な気もしますが例えば Wikipedia とか。 IRI: http://ja.wikipedia.org/wiki/まつもとゆきひろ URI: http://ja.wikipedia.org/wiki/%E3%81%BE%E3%81%A4%E3%82%82%E3%81%A8%E3%82%86%E3%81%8D%E3%81%B2%E3%82%8D これにアクセスしようと思ったり、a 要素の href 属性に使ったりするならば URI の方を使うのでしょうが、 このアドレス自体を表示したい場合は IRI の方を使うとか。 まぁ、IRI をサポートしようと思うと NFC や Punycode が必要になるので、 現時点ではサポートしようよ!という話ではないです。 > % を変えないエスケープ、というアイデアがなくもないのですが、 > 用法がわからないので、うまく使えるかどうかは不明です。 IRI の話を持ち出したのは実はこちら向けで、URI っぽい文字列全体にかけるエ スケープは、 基本的には IRI から URI への変換であるべきではないのか、と思うようになり ました。 http://tools.ietf.org/html/rfc3987#section-3.1 こちらは US-ASCII の範囲外しかいじらないので、ご指摘の %-encode の過剰適 用問題がありません。 また、URL っぽいものを URI に変換する手続きを HTML 5 の人々が考えています。 http://www.w3.org/html/wg/href/draft こちらは現状 %-encode の過剰適用の問題があるので、その点はつっついてみよ うかなと。 -- NARUSE, Yui