4

私はこれが一般的なエラーであることを知っており、既知の解決策を使用していますが、それでも同じエラーが発生します:

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 は何もしていません

私は何を間違っていますか?

4

2 に答える 2

14

open-uri ではなく、uri を要求するつもりだったと思います。また、ドキュメントによると、エンコードする余分な文字を含む 2 番目のパラメーターを指定できます。そこを通ってみてください[]

このソリューションのコードは次のようになります。

safeurl = URI.parse(URI.encode(url, "[]"))
于 2012-05-30T10:15:56.460 に答える
1

私はここで同じ問題を抱えています。私はこれを解決するためにこのアプローチを使用しました:

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

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

uri を要求する代わりに、CGI クラスを使用して無効な文字をエスケープしていますが、CGI はコロンやスラッシュを含むすべてをエスケープするため、gsub を使用してそれらを元に戻しています。

于 2012-05-31T14:41:20.497 に答える