我有&在我的一个参数中: 重定向行动:
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'&'重定向前使用'$',然后使用'&'再次'$'在重定向的动作中,但是必须有一些不太常见的方法吗?
答案 0 :(得分: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:
返回参数时,unescapeing字符串怎么样?它不会那么hacky。
Rack::Utils.unescape
答案 1 :(得分:0)
虽然使用get请求代替post不是一个好习惯,但是根据你的要求,只有一种黑客方法可以逃脱特殊字符,如下所示:
require 'uri'
tip_topic_name= URI.escape(tip_topic_name)
url = "http://myurl.com/#{tip_topic_name}"
result = open(url).read
同时检查具有转义表示的docs。