gpt4 book ai didi

Ruby,如何将一个参数添加到一个你不知道它是否已经有任何其他参数的 URL

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

我必须向不确定的 URL 添加一个新参数,假设 param=value

如果实际的 URL 已经有这样的参数

http://url.com?p1=v1&p2=v2

我应该将 URL 转换为另一个:

http://url.com?p1=v1&p2=v2&param=value

但是如果 URL 还没有任何参数,像这样:

http://url.com

我应该将 URL 转换为另一个:

http://url.com?param=value

我担心用 Regex 解决这个问题,因为我不确定寻找 & 是否就足够了。我在想也许我应该将 URL 转换为 URI对象,然后添加参数并再次将其转换为字符串。

正在寻求已经处于这种情况的人的任何建议。

更新

为了帮助参与,我分享了一个基本的测试套件:

require "minitest"
require "minitest/autorun"

def add_param(url, param_name, param_value)
# the code here
"not implemented"
end

class AddParamTest < Minitest::Test
def test_add_param
assert_equal("http://url.com?param=value", add_param("http://url.com", "param", "value"))
assert_equal("http://url.com?p1=v1&p2=v2&param=value", add_param("http://url.com?p1=v1&p2=v2", "param", "value"))
assert_equal("http://url.com?param=value#&tro&lo&lo", add_param("http://url.com#&tro&lo&lo", "param", "value"))
assert_equal("http://url.com?p1=v1&p2=v2&param=value#&tro&lo&lo", add_param("http://url.com?p1=v1&p2=v2#&tro&lo&lo", "param", "value"))
end
end

最佳答案

require 'uri'

uri = URI("http://url.com?p1=v1&p2=2")
ar = URI.decode_www_form(uri.query) << ["param","value"]
uri.query = URI.encode_www_form(ar)
p uri #=> #<URI::HTTP:0xa0c44c8 URL:http://url.com?p1=v1&p2=2&param=value>

uri = URI("http://url.com")
uri.query = "param=value" if uri.query.nil?
p uri #=> #<URI::HTTP:0xa0eaee8 URL:http://url.com?param=value>

编辑:(由 fguillen 合并所有好的命题,并使其与他的问题测试套件兼容。)

require 'uri'

def add_param(url, param_name, param_value)
uri = URI(url)
params = URI.decode_www_form(uri.query || "") << [param_name, param_value]
uri.query = URI.encode_www_form(params)
uri.to_s
end

关于Ruby,如何将一个参数添加到一个你不知道它是否已经有任何其他参数的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16623421/

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