URI.join中出现意外行为

时间:2016-04-06 11:01:33

标签: ruby

除非匹配URI::join,否则

/会删除其参数中/个字符后的所有内容。例如:

URI::join("http://www.example.com/prefix", "some_path").to_s
#=> "http://www.example.com/some_path"

URI::join("http://www.example.com/prefix/", "some_path").to_s
#=> "http://www.example.com/prefix/some_path"

它背后的原因是什么,以及如何在不依赖于那些不打算在该场景中使用的工具(例如File.join)的情况下处理这个问题?我需要使用任何一种类型的值作为基本网址。

1 个答案:

答案 0 :(得分:2)

这是预期的documented behavior(尽管有些隐藏在 Usage 部分中):

p URI.join('http://example.com', '/foo', '/bar')
# => #<URI::HTTP:0x01aaf0b0 URL:http://example.com/bar>

p URI.join('http://example.com', '/foo', 'bar')
# => #<URI::HTTP:0x801a92af0 URL:http://example.com/bar>

p URI.join('http://example.com', '/foo/', 'bar')
# => #<URI::HTTP:0x80135a3a0 URL:http://example.com/foo/bar>

您可以通过确保路径片段始终是完整的路径片段并在两侧都有斜杠来处理它。