2012-02-09 45 views
4

我正在尋找一種方便實用的方式將編碼值添加到Ruby中的URL查詢字符串中。 目前,我有:如何將編碼查詢值添加到URL?

require 'open-uri' 

u = URI::HTTP.new("http", nil, "mydomain.example", nil, nil, "/tv", nil, "show=" + URI::encode("Rosie & Jim"), nil) 

p u.to_s # => "http://mydomain.example/tv?show=Rosie%20&%20Jim" 

這不是我要找的,因爲我需要得到 "http://mydomain.example/tv?show=Rosie%20%26%20Jim",使show=值不被截斷。

Open :: URI是否有另一種方法可以做到這一點?如果不是,可以用任何其他標準Ruby或gem來完成嗎?

+0

你可能想看看[尋址(http://addressable.rubyforge.org/api/)寶石更方便。這是Ruby的URI的一切,還有更多。強烈建議除簡單URL操作以外的任何內容。 – 2012-02-09 19:27:56

回答

9

請使用CGI::escape而不是URI::encode來嘗試。 doc here

+0

謝謝。這樣做的工作。我注意到空間顯示爲加號;所以當我查看時,我發現URL查詢中的編碼稱爲「www_form」;這讓我找到了一個更方便的方式來使用open-uri,但我接受你的答案,因爲它完全符合我的要求。 – SimonMayer 2012-02-09 17:08:17

7

URI.encode_www_form運作良好,是用於添加多個參數

q = URI.encode_www_form("show" => "Rosie & Jim", "series" => "3", "episode" => "4") 
u = URI::HTTP.new("http", nil, "mydomain.example", nil, nil, "/tv/ragdoll", nil, q, nil)