提示:在 Ruby 中很好地重写 URL 查询参数

寻技术 Ruby编程 2023年07月11日 149

这是什么

  • 我没有找到在Ruby中重写URL的查询参数的方法,所以我把它放在一起。
  • 我会实现的,喜欢的话请使用

在 Ruby 中重写 URL 查询参数时的问题

在 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 查询参数

考虑在以下条件下要在 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

关闭

用微信“扫一扫”