作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在尝试找到一种将部分 url 路径段连接在一起的可靠方法。有没有快速的方法来做到这一点?
我尝试了以下方法:
puts URI::join('resource/', '/edit', '12?option=test')
我希望:
resource/edit/12?option=test
但是我得到了错误:
`merge': both URI are relative (URI::BadURIError)
我过去曾为此使用过 File.join()
,但将文件库用于 url 似乎有些不对。
最佳答案
URI 的 api 不一定很好。
URI::join 仅当第一个作为带有协议(protocol)的绝对 uri 开始时才有效,而后面的以正确的方式是相对的...除了我尝试这样做但甚至无法做到这一点工作。
这至少不会出错,但为什么它会跳过中间部分?
URI::join('http://somewhere.com/resource', './edit', '12?option=test')
我认为 URI 可能有点糟糕。它缺少有关实例的重要 api,例如您期望的实例 #join 或相对于基本 uri 进行评估的方法。这有点糟糕。
我认为您将不得不自己编写。或者只使用 File.join 和其他文件路径方法,在测试了所有你能想到的边缘情况后,确保它做你想要/期望的事情。
编辑 2016 年 12 月 9 日我想出了 addressable gem 做得很好。
base = Addressable::URI.parse("http://example.com")
base + "foo.html"
# => #<Addressable::URI:0x3ff9964aabe4 URI:http://example.com/foo.html>
base = Addressable::URI.parse("http://example.com/path/to/file.html")
base + "relative_file.xml"
# => #<Addressable::URI:0x3ff99648bc80 URI:http://example.com/path/to/relative_file.xml>
base = Addressable::URI.parse("https://example.com/path")
base + "//newhost/somewhere.jpg"
# => #<Addressable::URI:0x3ff9960c9ebc URI:https://newhost/somewhere.jpg>
base = Addressable::URI.parse("http://example.com/path/subpath/file.html")
base + "../up-one-level.html"
=> #<Addressable::URI:0x3fe13ec5e928 URI:http://example.com/path/up-one-level.html>
关于ruby - 如何安全地加入相对 url 段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8900782/
我是一名优秀的程序员,十分优秀!