Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 将参数添加到url_Ruby_Url_Parameters - Fatal编程技术网

Ruby 将参数添加到url

Ruby 将参数添加到url,ruby,url,parameters,Ruby,Url,Parameters,我有一个url(例如),我想给它添加一个参数(wmode=opaque),以便它: 有人能告诉我使用哪个函数来实现此功能吗?需要“uri” require 'uri' uri = URI.parse("http://www.youtube.com/watch?v=og9B3BEnBHo") uri.query = [uri.query, "wmode=opaque"].compact.join('&') puts uri.to_s #edit Since 1.9.2 there

我有一个url(例如),我想给它添加一个参数(wmode=opaque),以便它:

有人能告诉我使用哪个函数来实现此功能吗?

需要“uri”
require 'uri'

uri =  URI.parse("http://www.youtube.com/watch?v=og9B3BEnBHo")
uri.query = [uri.query, "wmode=opaque"].compact.join('&') 
puts uri.to_s

#edit Since 1.9.2 there are methods added to the URI module

uri =  URI.parse("http://www.youtube.com/watch?v=og9B3BEnBHo")
new_query_ar = URI.decode_www_form(String(uri.query)) << ["wmode", "opaque"]
uri.query = URI.encode_www_form(new_query_ar)
puts uri.to_s
uri=uri.parse(“http://www.youtube.com/watch?v=og9B3BEnBHo") uri.query=[uri.query,“wmode=opaque”].compact.join(“&”) 将uri.to_ #从1.9.2开始编辑URI模块中添加了一些方法 uri=uri.parse(“http://www.youtube.com/watch?v=og9B3BEnBHo")
new_query_ar=URI.decode_www_form(String(URI.query))随着Ruby多年来的发展,不同版本的答案有所不同

1.9.2之后 Ruby 1.9.2将
解码www\u表单
编码www\u表单
添加到URI模块中,使编码参数更容易

require 'uri'

uri = URI.parse("http://www.youtube.com/watch?v=og9B3BEnBHo")
new_query_ar = URI.decode_www_form(uri.query || '') << ["wmode", "opaque"]
uri.query = URI.encode_www_form(new_query_ar)
puts uri.to_s
解释
[uri.query,“wmode=opaque”]
是所有最终查询参数的数组。您可以通过扩展数组来添加更多内容:
[uri.query,“wmode=opaque”,“fullscreen=1”]
或者通过添加到最后一个元素:
“wmode=opaque&fullscreen=1”

从数组中删除
nil
元素,因此如果没有现有的查询参数,它将删除
uri.query


最后,将它们连接到查询字符串中。

另一个选项是使用可寻址gem

在项目中包括可寻址内容后,您需要做的就是:

url = Addressable::URI.parse('http://www.youtube.com/watch?v=og9B3BEnBHo')
url.query_values = (url.query_values || {}).merge(wmode:"opaque")

因为您可能需要添加多个查询参数,而不仅仅是一个,所以这里有一个版本,通过简单地传递一个散列,您可以添加任意多个参数。。。加上一个散列似乎是一种更自然的方式来传递
参数
,即使您只添加了一个参数

  require 'uri'
  def add_params(url, params = {})
    uri = URI(url)
    params    = Hash[URI.decode_www_form(uri.query || '')].merge(params)
    uri.query =      URI.encode_www_form(params)
    uri.to_s
  end
示例:

pry(main)> helper.add_params("http://example.com", b: 2)
=> "http://example.com?b=2"

pry(main)> helper.add_params("http://example.com?a=1", b: 2, c: 3)
=> "http://example.com?a=1&b=2&c=3"

pry(main)> helper.add_params("http://www.youtube.com/watch?v=og9B3BEnBHo", wmode: 'opaque')
=> "http://www.youtube.com/watch?v=og9B3BEnBHo&wmode=opaque"

在URI模块的最新版本中,您只需执行以下操作:

原始的http://www.youtube.com/watch?v=og9B3BEnBHo' append_params={'wmode':'opaque'} uri=uri.parse(原始uri) params=URI.decode_www_form(URI.query | |“”)+将参数附加到 uri.query=uri.encode\u www\u表单(参数) 将uri.to_
我们需要更多的信息才能提供帮助。ie代码。对于当前版本,我会说do“uri+'wmode=opaque”,这将为您提供正确的字符串。您使用的是net/http还是其他库?我想确保它正确地连接(它是用户输入)。注意:“+'wmode=opaque”应该变成“如果您将参数作为
散列
,请尝试
进行查询
。它是
ActiveSupport
的一部分,因此您可能也需要它。但它对我们非常有用。
uri.query
如果URL没有任何参数和
uri.decode\www\u表单(nil),则返回
nil
中断。
new\u query\u ar=URI.decode\u www\u form(URI.query | |[])注意;decode需要字符串而不是数组,因此
new\u query\u ar=URI.decode\u www\u form(URI.query | |“”)此答案已过时。请改用
URI.encode\u www\u form({wmode:“不透明”})
相关的可寻址问题
pry(main)> helper.add_params("http://example.com", b: 2)
=> "http://example.com?b=2"

pry(main)> helper.add_params("http://example.com?a=1", b: 2, c: 3)
=> "http://example.com?a=1&b=2&c=3"

pry(main)> helper.add_params("http://www.youtube.com/watch?v=og9B3BEnBHo", wmode: 'opaque')
=> "http://www.youtube.com/watch?v=og9B3BEnBHo&wmode=opaque"