Ruby URI :: InvalidURIError:除了编码之外的坏URI(不是URI?)

时间:2012-05-30 09:58:48

标签: ruby-on-rails ruby uri

我知道这是一个常见错误,我使用的是已知解决方案,但它仍然给我同样的错误:

require 'open-uri'
url = "http://website.com/dirs/filex[a]"

safeurl = URI.parse(URI.encode(url))
...

提供URI::InvalidURIError: bad URI(is not URI?):

我知道导致此问题的[]字符。但URI.encode没有做任何事情

我做错了什么?

2 个答案:

答案 0 :(得分:14)

我认为你的意思是要求uri,而不是开放式的uri。此外,according to the documentation您可以指定第二个参数,其中包含要编码的额外字符。尝试在那里传递[]

此解决方案的代码为:

safeurl = URI.parse(URI.encode(url, "[]"))

答案 1 :(得分:1)

我在这里遇到同样的问题。我用这个方法来解决这个问题:

require 'cgi'
url = "http://website.com/dirs/filex[a]"

safeurl = URI.parse(CGI.escape(url).gsub("%3A", ":").gsub("%2F", "/"))

我没有使用uri,而是使用CGI类来逃避无效字符,但是CGI会逃避一切,包括冒号和正斜杠,所以在我使用gsub将它们取回后。