From: KURODA Hiraku Date: 2008-09-10T03:00:10+09:00 Subject: [ruby-dev:36236] Re: URI::Parser こんばんは、黒田ひらくと申します。 ひと月前の話題で恐縮なのですが、添付ライブラリを利用させてもらっている立 場からコメントしたくて投稿します。 現在のURIライブラリはRFCに忠実である故に'_'を含むホスト名を含むURIを処理 しようとするとエラーになります。 open-uriやmechanizeがこのURIライブラリを利用しているため、URIには問題が あるけど実際に存在しているページをこれらのライブラリで処理できません。 手元では超簡易なopen-uriの代替メソッドや、Mechanizeについては lax-uri(*) なるものをでっち上げて対応しているところですが、やはり本家の方で対応して もらえれば嬉しいです。 (*): http://www.hinet.mydns.jp/tdiary/?date=20080906#p01 そのようなわけで、やまださんのURI::Parserが採用されればなぁと思っている 次第です。 以上、検討に際しての参考にして頂ければと思います。どうぞよろしくお願いい たします。 akira yamada / やまだあきら さんは書きました: > URIモジュールに手を加えて > ちょっと間違っているのだけど実際に使われてしまっているURI > を受け入れられるようにしてみました。 > > 過去に何度か<>とか_とかが入っていると > 例外になるという報告を受けていて、 > それに対応しようとしたものです。 > > URIモジュールでは従来からRegexpを使っていますが > そのRegexpの一部を指定したパターンで生成できるようにした > という感じの変更です。 > > こんな感じで使います: > >>> p = URI::Parser.new(:ESCAPED=>"(?:%[a-fA-F0-9]{2}|%u[a-fA-F0-9]{4})") > => # >>> u = p.parse("http://foo.bar.baz/%uABCD") > => # >>> URI.parse(u.to_s) > URI::InvalidURIError: bad URI(is not URI?): http://foo.bar.baz/%uABCD > from /.../lib/uri/common.rb:126:in `split' > from /.../lib/uri/common.rb:144:in `parse' > from /.../lib/uri/common.rb:592:in `parse' > from (irb):3 > from /usr/bin/irb1.9:12:in `
' >>> s = "http://foo.bar.baz/ABCD" > => "http://foo.bar.baz/ABCD" >>> u1 = p.parse(s) > => # >>> u2 = URI.parse(s) > => # >>> u1 == u2 > => true >>> u1.eql?(u2) > => false > > 新しいコードをにおいています。 > ほとんどはコードを移動しただけで、従来のテストも通ることを確認しています。 > > できればruby1.9に入れたいなと思っているのですが > いかがでしょうか。 > -- -------------------------------------------------- 黒田 拓(くろだ ひらく) hiraku@sapporo.email.ne.jp http://www.hinet.mydns.jp/ --------------------------------------------------