Fla*_*kou 134 ruby uri ruby-on-rails url-parameters
我有一些网址,比如
http://www.example.com/something?param1=value1¶m2=value2¶m3=value3
Run Code Online (Sandbox Code Playgroud)
我想从这些URL中提取参数并将它们放入哈希中.显然,我可以使用正则表达式,但我只是想知道是否有更简单的方法来使用Ruby或Rails.我没有在Ruby模块中找到任何东西,URI
但也许我错过了一些东西.
事实上,我需要一种方法来做到这一点:
extract_parameters_from_url("http://www.example.com/something?param1=value1¶m2=value2¶m3=value3")
#=> {:param1 => 'value1', :param2 => 'value2', :param3 => 'value3'}
Run Code Online (Sandbox Code Playgroud)
你有什么建议吗?
Sni*_*per 156
我想你想把任何给定的URL字符串变成HASH吗?
您可以尝试http://www.ruby-doc.org/stdlib/libdoc/cgi/rdoc/classes/CGI.html#M000075
require 'cgi'
CGI::parse('param1=value1¶m2=value2¶m3=value3')
Run Code Online (Sandbox Code Playgroud)
回报
{"param1"=>["value1"], "param2"=>["value2"], "param3"=>["value3"]}
Run Code Online (Sandbox Code Playgroud)
小智 148
我发现自己最近的项目需要同样的东西.在Levi的解决方案的基础上,这是一个更清洁,更快的方法:
Rack::Utils.parse_nested_query 'param1=value1¶m2=value2¶m3=value3'
# => {"param1"=>"value1", "param2"=>"value2", "param3"=>"value3"}
Run Code Online (Sandbox Code Playgroud)
rtd*_*tdp 93
刚刚改进Levi回答 -
Rack::Utils.parse_query URI("http://example.com?par=hello&par2=bye").query
Run Code Online (Sandbox Code Playgroud)
对于像上面的url这样的字符串,它将返回
{ "par" => "hello", "par2" => "bye" }
Run Code Online (Sandbox Code Playgroud)
小智 42
对于URI.parse
与之结合的纯Ruby解决方案CGI.parse
(即使不需要Rails/Rack等,也可以使用它):
CGI.parse(URI.parse(url).query)
# => {"name1" => ["value1"], "name2" => ["value1", "value2", ...] }
Run Code Online (Sandbox Code Playgroud)
Aru*_*hit 31
解决问题的方法不止一种.其他人向你展示了一些技巧.我知道另一个技巧.这是我的尝试: -
require 'uri'
url = "http://www.example.com/something?param1=value1¶m2=value2¶m3=value3"
uri = URI(url)
# => #<URI::HTTP:0x89e4898 URL:http://www.example.com/something?param1=value1¶m2=value2¶m3=value3>
URI::decode_www_form(uri.query).to_h # if you are in 2.1 or later version of Ruby
# => {"param1"=>"value1", "param2"=>"value2", "param3"=>"value3"}
Hash[URI::decode_www_form(uri.query)] # if you are below 2.1 version of Ruby
# => {"param1"=>"value1", "param2"=>"value2", "param3"=>"value3"}
Run Code Online (Sandbox Code Playgroud)
阅读方法docomentation ::decode_www_form
.
Yar*_*rin 12
查看可寻址的 gem - Ruby的URI模块的流行替代品,使查询解析变得容易:
require "addressable/uri"
uri = Addressable::URI.parse("http://www.example.com/something?param1=value1¶m2=value2¶m3=value3")
uri.query_values['param1']
=> 'value1'
Run Code Online (Sandbox Code Playgroud)
(与URI不同,它显然也处理param编码/解码)
小智 8
对于 Ruby 2.7/3,使用 CGI 可能是一种过时的方法。
这是使用 URI 执行此操作的巧妙方法:
uri = URI.parse 'https://duckduckgo.com/?q=ruby+programming+language'
params = Hash[URI.decode_www_form uri.query]
# => {"q"=>"ruby programming language"}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
108953 次 |
最近记录: |