Экранирование только части строки запроса в Rails - PullRequest
1 голос
/ 22 марта 2012

В приложении Rails 3.0.11 я использую обычные вспомогательные методы для генерации URL для некоторых ссылок (например:

home_url() # for the home page
search_url() # for the search page

и т.д.. )

Я передаю несколько параметров, которые будут использоваться для создания строки запроса, которая затем добавляется к URL-адресу. например,

search_url(:text => '123')  # => http://mysite.com/search?text=123

Некоторые из этих параметров становятся немного сложнее, и есть несколько вложенных хэшей, например,

search_url(:text => '123', :categories => {:category_1 => 1, :category_2 => 2}) # => http://mysite.com/search?text=123&categories[category_1]=1&categories[category_2]=2

Проблема, с которой я столкнулся, заключается в том, как избежать этого должным образом, чтобы он проверялся (по отношению к валидатору W3C HTML), особенно в отношении квадратных скобок. Если я использую h (), амперсанды экранируются, но все равно не проходят проверку в квадратных скобках. Я могу использовать CGI.escape для всей строки, но это также закодирует все перед строкой запроса, включая: // в начале адреса, что означает, что браузер будет обрабатывать его как относительный URL, когда он должен быть абсолютным (это Я должен быть боюсь).

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

Приветствия

Адам

1 Ответ

1 голос
/ 22 марта 2012

Это исправлено в рельсах 3.2.Под капотом работает метод Hash # to_query.

3.0

{ :x => { :y => '[]' } }.to_query
=> "x[y]=%5B%5D"

3.2

{ :x => { :y => '[]' } }.to_query
 => "x%5By%5D=%5B%5D"

Возможно, покопаться в источнике, чтобы увидеть какие измененияесть и перенести их в ваше приложение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...