Rails проверяет, закодирован ли URL

Я использую URI.encode для кодирования URL-адресов в моем приложении для железных дорог. Но иногда эти URL-адреса могут быть уже закодированы, и я не хочу их снова кодировать. Здесь я вижу одно решение: Как найти вне, если строка уже была закодирована в URL-адресе?

Однако было интересно, есть ли в Ruby уже доступный API для этого?

Также, как предлагается в https://stackoverflow.com/a/2295286/1475737, выполняется декодирование строки и проверка ее длины с помощью оригинал правильное решение?

Ценю любые предложения!


person snow_leopard    schedule 16.12.2014    source источник


Ответы (1)


Модуль 'uri' имеет регулярное выражение, содержащее список символов, которые должны быть экранированы для кодировки URI:

require 'uri'

URI::REGEXP::UNSAFE

=> /[^-_.!~*'()a-zA-Z\d;\/?:@&=+$,\[\]]/n

Итак, одно из решений - проверить, соответствует ли данная строка этому регулярному выражению, и закодировать ее, только если она соответствует.

person nimrodm    schedule 16.12.2014
comment
Кажется, это не определено для ruby ​​1.9.3 :(. - person snow_leopard; 16.12.2014
comment
Истинный. Фактически, uri.encode устарел, и вместо него следует использовать модуль cgi. К сожалению, CGI не предоставляет подобной константы. - person nimrodm; 16.12.2014
comment
Кроме того, здесь также было предложено stackoverflow.com/a/2295317/1475737, но у него есть нерабочий пример как Что ж. - person snow_leopard; 16.12.2014
comment
Это было перестроено в 1.9.3. Вы можете попробовать следующее: URI :: Parser.new.pattern, но не уверены, вернет ли это то, что вы хотите .... - person codingbunny; 16.12.2014