如何将编码的查询值添加到URL?

Sim*_*yer 5 ruby uri open-uri urlencode ruby-1.9.3

我正在寻找一种方便和实用的方法来将编码值添加到Ruby中的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"
Run Code Online (Sandbox Code Playgroud)

这不是我正在寻找的,因为我需要得到 "http://mydomain.example/tv?show=Rosie%20%26%20Jim",所以这个show=值不会被截断.

Open :: URI有另一种方法可以做到这一点吗?如果没有,可以使用任何其他标准的Ruby或gem吗?

Bal*_*ick 10

尝试CGI::escape而不是URI::encode.doc在这里


Sim*_*yer 8

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)
Run Code Online (Sandbox Code Playgroud)