2012-02-09 42 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)