Rails字符串替换URL参数

时间:2017-01-31 19:28:29

标签: ruby-on-rails ruby

我们说我有一个字符串:

url = "https://example.com/user/tr_auth.php?key=34432&cmp_id=344&tr_id={user_id}"

我想更新cmp_id=344来说明cmp_id=44553。什么是实现这一目标的最佳方法?我不能说,因为我不知道cmp_id可能是什么,只是它将是字符串中的URL参数。

好像我想做像

这样的事情
uri = URI.parse(url)
params = CGI.parse(uri.query)

但是,如何重新构建字符串,将cmp_id参数换成44553

谢谢!

3 个答案:

答案 0 :(得分:14)

如果您正在处理Web应用程序(和/或标签似乎表明的Rails),那么您当然可以使用Rack。 Rack::Utils具有解析和构建查询的方法。

url = "https://example.com/user/tr_auth.php?key=34432&cmp_id=344&tr_id={user_id}"
uri = URI.parse(url)

query = Rack::Utils.parse_query(uri.query)
# => {"key"=>"34432", "cmp_id"=>"344", "tr_id"=>"{user_id}"}

# Replace the value
query["cmp_id"] = 44553

uri.query = Rack::Utils.build_query(query)
uri.to_s
# => "https://example.com/user/tr_auth.php?key=34432&cmp_id=44553&tr_id=%7Buser_id%7D"

另请注意,默认情况下,Rack会转义查询。

答案 1 :(得分:1)

首先,您可以解析params的URL:

require 'cgi'
url = 'https://example.com/user/tr_auth.php?key=34432&cmp_id=344&tr_id={user_id}'
string_params = url.split('?')[1]
hash = CGI::parse(string_params)

然后,您可以按键迭代哈希并更改值:

hash.keys.each {|key| hash[key]='new value'}
url_params = hash.to_param

答案 2 :(得分:1)

url = "https://example.com/user/tr_auth.php?key=34432&cmp_id=344&tr_id={user_id}"
uri = URI.parse(url)
params = CGI.parse(uri.query)
params['cmp_id'] = 44553

new_str = uri.host + uri.path + '?' + params.to_query