我有一系列丑陋、复杂的 URL 字符串,我想将人们输入的特定搜索词(例如“示例”)从http://google.com/search/things/q="example"
.
偶尔会有一个带有+
分隔词的搜索,并且在用户指定的查询末尾是一个&
.
我不知道从哪里开始,即使经过大量的谷歌搜索。任何让我开始的帮助将不胜感激!
我有一系列丑陋、复杂的 URL 字符串,我想将人们输入的特定搜索词(例如“示例”)从http://google.com/search/things/q="example"
.
偶尔会有一个带有+
分隔词的搜索,并且在用户指定的查询末尾是一个&
.
我不知道从哪里开始,即使经过大量的谷歌搜索。任何让我开始的帮助将不胜感激!
CGI.parse(URI.parse(url).query)
例子:
>> CGI.parse(URI.parse("http://google.com/?foo=bar&baz=hello").query)
=> {"foo"=>["bar"], "baz"=>["hello"]}
当然,请记住要求cgi
和uri
首先。
Addressable::URI gem 和 Ruby 自己的URI模块都可以做你想做的事,或者你可以很容易地自己动手。
Addressable::URI 非常强大并且符合URI规范。以下是 PRY 内部的使用示例:
[9] (pry) main: 0> uri = Addressable::URI.parse('http://google.com/search/things?q="example"')
=> #<Addressable::URI:0x80ec33a0 URI:http://google.com/search/things?q="example">
[10] (pry) main: 0> uri.query
=> "q=\"example\""
[11] (pry) main: 0> uri.query_values
=> {"q"=>"\"example\""}
特别有用的是query_values
返回哈希的方法。
你可以很容易地写出同样的东西:
Hash['http://google.com/search/things?q="example"'.split('?').last.split('&').map{ |q| q.split('=') }]
=> {"q"=>"\"example\""}
Addressable::URI 和 URI 的优点是它们提供了许多其他功能来操作 URL,而您不必这样做。
你可能想要这样的东西: http: //codefol.io/posts/9-How-Does-Rack-Parse-Query-Params-With-parse-nested-query
如果您使用的是基于 Rack 的框架(如 Sinatra 或 Rails),那么您已经免费获得了它。