0

パラメータの 1 つに & があります: リダイレクト アクション:

format.html {redirect_to :action => 'index',:flag => params[:flag], :tip_type => params[:tip_type], :tip_topic_name => params[:tip_topic_name]}

出力:

Started GET "/admin/answer_reviews?flag=tip_filter&tip_topic_name=Flu+&+Cold&tip_type=Haiku" for 127.0.0.1 at 2013-03-08 13:53:38 +0530
Processing by Admin::AnswerReviewsController#index as HTML
Parameters: {"flag"=>"tip_filter", "tip_topic_name"=>"Flu ", " Cold"=>nil, "tip_type"=>"Haiku"}

しかし、私はそれが欲しい:

Parameters: {"flag"=>"tip_filter", "tip_topic_name"=>"Flu & Cold", "tip_type"=>"Haiku"}

私も試しました:

format.html {redirect_to :action => 'index',:flag => params[:flag], :tip_type => Rack::Utils.escape(params[:tip_type]), :tip_topic_name => Rack::Utils.escape(params[:tip_topic_name])}

しかし、それは次のことにつながります:

Started GET "/admin/answer_reviews?flag=tip_filter&tip_topic_name=Flu+%2526+Cold&tip_type=Do%2527s+And+Don%2527ts" for 127.0.0.1 at 2013-03-08 14:01:37 +0530
Processing by Admin::AnswerReviewsController#index as HTML
Parameters: {"flag"=>"tip_filter", "tip_topic_name"=>"Flu %26 Cold", "tip_type"=>"Do%27s And Don%27ts"}

リダイレクトの前に「$」を使用して「&」を gsub でき、リダイレクトされたアクションで「&」を使用して「$」を再度使用できますが、ハックの少ない方法がいくつかあるはずです。

4

2 に答える 2

1

これで試してみませんか:

:tip_topic_name => raw(params[:tip_topic_name])

編集:

フィードバックと以下の私のコメントを受け取った後、あなたはあなたのアプローチに従うべきだと思います

format.html {redirect_to :action => 'index',:flag => params[:flag], :tip_type => Rack::Utils.escape(params[:tip_type]), :tip_topic_name => Rack::Utils.escape(params[:tip_topic_name])}

そして、"Flu %26 Cold"html_safeでコントローラーに戻るときに文字列を解析しますが、その前にnulでないかどうかを確認します

たとえば、インデックスページに対してのみ、 before_filter でそれを行うことができます

編集2:

パラメータが返されるときに文字列をエスケープ解除するのはどうですか。それほどハッキーではないでしょう。

Rack::Utils.unescape
于 2013-03-08T08:42:27.520 に答える
0

post の代わりに get リクエストを使用することはお勧めできませんが、必要条件に応じて、次のように特殊文字をエスケープするハック方法があります。

require 'uri'
tip_topic_name= URI.escape(tip_topic_name)
url = "http://myurl.com/#{tip_topic_name}"
result = open(url).read

エスケープ表現のあるドキュメントも確認してください。

于 2013-03-08T08:53:52.913 に答える