0

我在我的一个参数中有 &:重定向操作:

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])}

然后在返回到带有 html_safe 的控制器时解析字符串"Flu %26 Cold",但在此之前检查它是否不是 nul

您可以在 before_filter 中执行此操作,例如,仅用于索引页面

编辑2:

返回参数时如何对字符串进行转义。它不会那么hacky。

Rack::Utils.unescape
于 2013-03-08T08:42:27.520 回答
0

虽然使用 get 请求而不是 post 不是一个好习惯,但根据您的要求,只有一种 hack 方法可以转义特殊字符,如下所示:

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 回答