我们说我有一个字符串:
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
?
谢谢!
答案 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