我正在寻找一种方便实用的方法来将编码值添加到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"
这不是我想要的,因为我需要得到
"http://mydomain.example/tv?show=Rosie%20%26%20Jim"
,以便show=
值不会被截断。
Open :: URI有另一种方法可以做到这一点吗?如果没有,是否可以使用任何其他标准Ruby或gem?
答案 0 :(得分:10)
尝试使用CGI::escape
代替URI::encode
。 doc here
答案 1 :(得分: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)