我知道这是一个常见错误,我正在使用已知的解决方案,但它仍然给我同样的错误:
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 没有做任何事情
我究竟做错了什么?
我知道这是一个常见错误,我正在使用已知的解决方案,但它仍然给我同样的错误:
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 没有做任何事情
我究竟做错了什么?
我认为您的意思是要求 uri,而不是 open-uri。此外,根据文档,您可以指定带有额外字符的第二个参数进行编码。尝试通过[]
那里。
此解决方案的代码为:
safeurl = URI.parse(URI.encode(url, "[]"))
我在这里遇到同样的问题。我用这种方法来解决这个问题:
require 'cgi'
url = "http://website.com/dirs/filex[a]"
safeurl = URI.parse(CGI.escape(url).gsub("%3A", ":").gsub("%2F", "/"))
我没有要求 uri,而是使用 CGI 类来转义无效字符,但是 CGI 会转义所有内容,包括冒号和正斜杠,所以在我使用 gsub 将它们取回之后。