В Rails 3.0.11 в приложении, я использую обычные вспомогательные методы для генерации адреса для некоторых соединений (например:Спасаясь только строки запроса часть URL в Rails
home_url() # for the home page
search_url() # for the search page
и т.д. )
Я передаю кучу параметров, которые будут использоваться для создания строки запроса, которая затем добавляется к URL-адресу. например
search_url(:text => '123') # => http://mysite.com/search?text=123
Некоторые из этих Params получить немного более сложным, и есть некоторые вложенные хэши, например
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 на всей строке, но это также будет кодировать все перед querystring, включая: // в начале адреса, что означает, что браузер будет относиться к нему как относительный URL, когда он должен быть абсолютным (это должно быть, я боюсь).
Я знаю, что я мог бы просто взломать строку, закодировать нужные мне биты и поместить их обратно, но похоже, что должен быть лучший способ. Кто-нибудь знает об одном?
Приветствия
Адам
Полностью несвязанной: рубин не требует '() 'для вызовов методов. – Reactormonk
@ Tass, иногда это делает его более читаемым. Хотя не когда параметры не передаются. – Yule
Я знаю, что это было давно, но я должен спросить: это повлияло на что-то другое, кроме валидатора? Другими словами, _why_ являются квадратными скобками, недопустимыми в строках запроса? – KaptajnKold