Ruby URI слияния и выхода - PullRequest
       0

Ruby URI слияния и выхода

3 голосов
/ 21 февраля 2011

У меня есть объект 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 по умолчанию не выполняет это экранирование?

Или, может быть, есть лучший способ сделать это?

Ответы [ 2 ]

1 голос
/ 21 февраля 2011

по спецификации Проверьте выпуск № 3457 на ruby ​​bugtracker

1 голос
/ 21 февраля 2011

Используйте CGI.escape вместо URI.escape:

require 'uri'
require 'cgi'
uri = URI.parse 'http://example.com'    
path = CGI.escape('/?foo[123]=5')
uri.merge!(path) #=> #<URI::HTTP:0x00000002947918 URL:http://example.com/%2F%3Ffoo%5B123%5D%3D5>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...