将带有空格的字符串转换为URL

12

我正在使用Ruby和谷歌的反向地理编码YQL表来自动化我的一些搜索查询。我遇到的问题是将查询转换为合法的URL格式。问题是我使用的编码返回了非法的URL。我运行的查询如下:

query="select * from google.geocoding where q='40.714224,-73.961452'" 
pQuery= CGI::escape(query)

处理后的查询最终输出如下所示

http://query.yahooapis.com/v1/public/yql?q=select+%2A+from+google.geocoding+where+q%3D%2740.3714224%2C--73.961452%27+format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=

哎呀,URL是非法的。在YQL控制台中检查查询应该是什么样子时,我得到了以下结果

http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20google.geocoding%20where%20q%3D%2240.714224%2C-73.961452%22&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=

希望大家能够看到(笑),编码全都是错的。我想知道是否有人知道如何生成正确的URL。

1个回答

23

如果你想转义URI,应该使用URI::escape

require 'uri'

URI.escape("select * from google.geocoding where q='40.714224,-73.961452'")
# => "select%20*%20from%20google.geocoding%20where%20q='40.714224,-73.961452'"

请注意,这将把 # 转换为 %23,因此可能不是您想要的。 - Ibrahim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接