2012-05-30 42 views
4

我知道这是一个常见的错误,我用一个已知的解决方案,但它仍然给了我同样的错误:红宝石URI :: InvalidURIError:坏URI(是不是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没有做任何事情

我在做什么错?

回答

14

我想你的意思是需要URL,而不是打开-URI。另外,您还可以指定第二个参数,并使用额外的字符进行编码。尝试在那里通过[]

此解决方案的代码将是:

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

需要'uri'没有什么不同,但通过[]修复它 – Akshat

1

我在这里有同样的问题。我用这个形式给出了解决这个:

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

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

,而不是要求URI,我使用CGI类逃脱无效字符,但CGI逃脱一切,包括冒号和斜杠,所以以后我使用gsub让他们回来。

相关问题