我试图解析一个URI中有括号 - [和] - 在其中。我试图用URI.parse直接解析这个,但括号会导致失败。因此,我尝试使用CGI :: escape编码URI来处理括号,但是当我尝试使用URI.parse解析这个编码的URI时,它似乎无法将其识别为URI并将整个URI放入路径中目的。如何解析Ruby中的编码URI?
在irb会话中演示;
irb(main):001:0> require 'uri'
=> true
irb(main):002:0> require 'cgi'
=> true
irb(main):003:0> name = "http://www.website.com/dir1/dir[2]/file.txt"
=> "http://www.website.com/dir1/dir[2]/file.txt"
irb(main):004:0> encoded_name = CGI::escape(name)
=> "http%3A%2F%2Fwww.website.com%2Fdir1%2Fdir%5B2%5D%2Ffile.txt"
irb(main):005:0> parsed_name = URI.parse(encoded_name)
=> #<URI::Generic:0x00000001e8f520 URL:http%3A%2F%2Fwww.website.com%2Fdir1%2Fdir%5B2%5D%2Ffile.txt>
irb(main):006:0> parsed_name.scheme
=> nil
irb(main):007:0> parsed_name.host
=> nil
irb(main):008:0> parsed_name.path
=> "http%3A%2F%2Fwww.website.com%2Fdir1%2Fdir%5B2%5D%2Ffile.txt"
irb(main):009:0> URI.split(encoded_name)
=> [nil, nil, nil, nil, nil, "http%3A%2F%2Fwww.website.com%2Fdir1%2Fdir%5B2%5D%2Ffile.txt", nil, nil, nil]
不管怎样,我的工作围绕此刻以下难看,但有效的,黑客
encoded_name = name.gsub(/\[/,"%5B").gsub(/\]/,"%5D")
与URI.parse解析这将产生期望的结果,但如果其他奇怪的字符将不迭找到他们的方式到我的URI。所以我的问题是,是否有坚实的方法来做到这一点不会倒下?
你想从那个URI准确得到什么? – khelll 2009-11-23 11:58:17
我想将它分成主机名和路径名。 – brad 2009-11-23 22:17:50