簡體   English   中英

Rails 字符串替換 URL 參數

[英]Rails String Replace URL Parameters

假設我有一個字符串:

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

我想更新cmp_id=344cmp_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM