gpt4 book ai didi

ruby - 如何安全地加入相对 url 段?

转载 作者:数据小太阳 更新时间:2023-10-29 06:26:55 26 4
gpt4 key购买 nike

我正在尝试找到一种将部分 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com