2012-03-22 7 views
1

内のURLのクエリ文字列だけの部分をエスケープ、私はいくつかのリンクのURLを生成するために、通常のヘルパーメソッドを使用しています(例:はRailsの3.0.11アプリで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の一部を少し複雑になりますし、いくつかのネストされたハッシュが、私が持っている問題は、それがW3C HTMLに対して(検証するように適切にこれをエスケープする方法です

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 

例えばありますバリデーター)、特に角括弧については、 h()を使用すると、アンパサンドはエスケープされますが、角括弧で検証が失敗します。文字列全体にCGI.escapeを使うこともできますが、これはクエリーストリングの前にあるすべてのものをエンコードします。//はアドレスの先頭にあります。つまり、ブラウザーはURLを相対URLとして扱います。私は恐れている必要があります)。

私は文字列をハックして、必要なビットをエンコードし、一緒に戻すことができますが、より良い方法が必要であるように思えます。誰でも知っている?

乾杯

アダムは

+2

にそれらをバックポートするために、ソースを掘り下げる:ルビーは( '必要はありません) 'を呼び出します。 – Reactormonk

+0

@タス、時には読みやすくすることもあります。パラメータが渡されないときではありません。 – Yule

+0

これはずっと前のことでしたが、バリデータ以外には影響を与えましたか?言い換えれば、_why_は大括弧で、クエリ文字列では使用できません。 – KaptajnKold

答えて

1

これはレール3.2に固定されています。フードの下では、それを行うハッシュ#to_queryメソッドです。

3.0

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

3.2

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

おそらく変更が何であるかを見ると全く関係のないあなたのアプリ

+0

ああ、いいです。そこに何があるのか​​見てみましょう。とにかくこれが対処されたことを知ってうれしいです。乾杯 – Addsy

関連する問題