转义Rails中的URL的查询字符串部分

时间:2012-03-22 16:46:06

标签: ruby-on-rails ruby ruby-on-rails-3

在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(它需要我害怕。)

我知道我可以破解字符串,编码我需要的位并将其重新组合在一起,但似乎必须有更好的方法。有人知道吗?

干杯

亚当

1 个答案:

答案 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"

或许深入了解源代码,了解更改内容并将其移植到您的应用中