У меня есть объект URI.
require 'uri'
uri = URI.parse 'http://example.com'
Мне нужно объединить некоторый путь к этому URI.
path = URI.escape('/?foo[123]=5')
uri.merge!(path)
И получить исключение:
URI::InvalidURIError: bad URI(is not URI?): /?foo[123]=5
Это связано с тем, что некоторые символы в пути считаются небезопасными ("[" и "]"), но эти символы не защищены URI.escape.
Я решаю эту проблему с помощью двух вызовов URI.escape:
path = URI.escape(URI.escape('/?foo[123]=5'), '[]')
uri.merge!(path)
Вопрос в том, почему URI.escape по умолчанию не выполняет это экранирование?
Или, может быть, есть лучший способ сделать это?