2012-06-27 31 views
0

我想通過一個循環來改變這個http://www.exampleofurl.com/search?q=4&e=25;i=8&b=2的每個參數,但我得到這個輸出。如何使用Ruby通過循環更改URL參數?

http://www.exampleofurl.com/search?q=changed&e=25;i=8&b=2 
http://www.exampleofurl.com/search?q=4&e=changed;i=8&b=2 
http://www.exampleofurl.com/search?q=4&e=25;i=changed&b=2 
http://www.exampleofurl.com/search?q=4&e=changed5;i=8&b=changed 

當我的參數是空的,我得到這個奇怪的輸出。

search?changedqchanged=changed4changed&changedechanged=changed2changed5changed;changedichanged=changed8changed&changedbchangedochangedochanged=changed 

這是我的代碼。

require 'uri' 
url = "http://www.exampleofurl.com/search?q=4&e=25;i=8&b=2" 
uri = URI.parse(url) 

params = {} 
t = "changed" 

q = uri.query 
p = q.split(/[&;]/) if q != nil 

p.each do |part| 
    k,v = part.split('=', 2) 
    params[k] = v 

    t.each do |tr| 
     uri.query = q.gsub(params[k], tr) 
    end 
end 

有人可以告訴我什麼是錯,什麼是最有效的方法嗎?

我想要這樣的輸出。

q=changed&e=25;i=8&b=2 
q=4&e=changed;i=8&b=2 
q=4&e=25;i=changed&b=2 
q=4&e=25;i=8&b=changed 

在此先感謝。

馬爾科

+0

我不太清楚你想實現什麼,但是無論如何我沒有得到這段代碼來運行(Ruby 1.9),因爲字符串沒有提供每個iteratore(t.each do | tr | won沒有工作) – leifg

回答

0

有關查詢部分的工作,我認爲你可以做這樣的事情:

CGI::parse(uri.query).inject({}) { |hash, (key, value)| hash[key] = "changed"; hash} 

這將導致一個哈希像

{"q"=>"changed", "e"=>"changed", "i"=>"changed", "b"=>"changed"} 

如果你加入這回到你解析的URI中,你應該完成。