[英]Rails String Replace URL Parameters
假設我有一個字符串:
url = "https://example.com/user/tr_auth.php?key=34432&cmp_id=344&tr_id={user_id}"
我想更新cmp_id=344
說cmp_id=44553
。 實現這一目標的最佳方法是什么? 我不能每次說 gsub 因為我不知道什么 cmp_id 可能相等,只知道它將是字符串中的 URL 參數。
好像我想做類似的事情
uri = URI.parse(url)
params = CGI.parse(uri.query)
但后來,我怎么重新編譯字符串換出cmp_id
參數是44553
?
謝謝!
如果您正在處理 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 會轉義查詢。
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
首先,您可以解析 url 的 params:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.