在Rails 3.0.11应用程序中,我使用常规帮助器方法为某些链接生成URL(例如:
home_url() # for the home page
search_url() # for the search page
等。 )
我传递了一堆参数,这些参数将用于创建查询字符串,然后将其附加到网址。例如
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(它需要我害怕。)
我知道我可以破解字符串,编码我需要的位并将其重新组合在一起,但似乎必须有更好的方法。有人知道吗?
干杯
亚当
答案 0 :(得分:1)
这已在rails 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"
或许深入了解源代码,了解更改内容并将其移植到您的应用中