URL-адрес в рубине

В Ruby много обсуждений об экранировании URL-адресов, но, к сожалению, я не нашел подходящего решения.

В общем, URI.escape должен выполнять задание, но похоже, что он не поддерживает все символы, например, он не убегает "[".

URI.parse(URI.escape("1111{3333"))  

работает хорошо.

URI.parse(URI.escape("1111[3333"))

вызывает исключение.

Я понимаю, что "[" не является подходящим символом в URL-адресе в соответствии с RFC, но когда я ввожу его в браузер, он принимает его и отображает страницу, поэтому мне нужно точно такое же поведение.

Знаете ли вы готовое решение для экранирования в Ruby?

Ответ 1

Обычно я использую

CGI.escape

чтобы избежать параметров URI.

require 'cgi'. 

CGI.escape('1111[3333')
=> "1111%5B3333" 

Ответ 2

Символ [является символом ограничителя uri и не требует экранирования.

http://www.ietf.org/rfc/rfc2396.txt раздел 2.4.3. Исключенные символы US-ASCII