在 Ruby 中重写 URL 查询参数时,经常使用URI
模块。
uri = URI('https://example.com')
uri.query = 'a=1'
uri.to_s #=> "https://example.com?a=1"
然而,这会导致以下问题。
如果查询参数从一开始就给出,这样的实现会覆盖它,信息会丢失。
uri = URI('https://example.com?b=1')
uri.query = 'a=1'
uri.to_s #=> "https://example.com?a=1"
为了解决覆盖问题,我们假设实现如下。
uri = URI('https://example.com?b=1')
uri.query += '&a=1'
uri.to_s #=> "https://example.com?b=1&a=1"
尽管这似乎已经解决了问题,但这种实现又引发了另一个问题。
当与您要提供的查询参数相同的参数已经给出时,就会出现问题。
最初,更新现有查询参数的值是正确的,但它会被复制。
uri = URI('https://example.com?a=2')
uri.query += '&a=1'
uri.to_s #=> "https://example.com?a=2&a=1"
考虑在以下条件下要在 Ruby 中重写 URL 的查询参数的情况。
下面的方法实现了这样的实现。
def create_link_url(url)
uri = URI(url)
query = URI.decode_www_form(uri.query.to_s).to_h
query['a'] = '1'
uri.query = URI.encode_www_form(query)
uri.to_s
end
通过这样的实现,查询参数的 URL 可以很好地重写。
原创声明:本文系作者授权九品源码发表,未经许可,不得转载;
原文地址:https://www.19jp.com/show-308622503.html
以上就是提示:在 Ruby 中很好地重写 URL 查询参数的详细内容,更多关于提示:在 Ruby 中很好地重写 URL 查询参数的资料请关注九品源码其它相关文章!