2012-05-30 4 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

Я думаю, вы хотели потребовать uri, а не open-uri. Кроме того, according to the documentation вы можете указать второй параметр с дополнительными символами для кодирования. Попробуйте проехать [].

Код для этого решения будет:

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", "/")) 

Вместо того, чтобы требовать Ури я использую класс CGI, чтобы избежать недопустимых символов, но CGI ускользает все, в то числе двоеточия и слэша, поэтому после того, как я m, используя gsub, чтобы вернуть их.

Смежные вопросы