2011-11-25 64 views
1

是否有可能让轨道解码查询参数为utf8。Rails 2.3.9查询参数的编码

如果我有这样的事/富?PARAM =£

我尝试访问参数编码为ASCII-8BIT在我的控制器参数。这导致许多事情中断,因为我们很多其他的字符串被编码为UTF-8,而ruby不喜欢混合编码。

params[:param].encoding == Encoding.find("ASCII-8BIT") 

回答

2

该解决方案从辉煌的文章取自http://jasoncodes.com/posts/ruby19-rails2-encodings

感谢磨杰森风化这个!

如果你在Rails的2.3.x版本系列,你需要创建一个名为config /初始化/ utf8_params.rb文件有以下内容来解决这个问题

raise "Check if this is still needed on " + Rails.version unless Rails.version == '2.3.10' 

class ActionController::Base 

    def force_utf8_params 
    traverse = lambda do |object, block| 
     if object.kind_of?(Hash) 
     object.each_value { |o| traverse.call(o, block) } 
     elsif object.kind_of?(Array) 
     object.each { |o| traverse.call(o, block) } 
     else 
     block.call(object) 
     end 
     object 
    end 
    force_encoding = lambda do |o| 
     o.force_encoding(Encoding::UTF_8) if o.respond_to?(:force_encoding) 
    end 
    traverse.call(params, force_encoding) 
    end 
    before_filter :force_utf8_params 

end 

一定要看看其他的文章中的提示,特别是在视图中的魔法评论周围。再次感谢杰森。

+0

在我的情况下,我不得不使用'ActionController :: Base'修补程序'ApplicationController'。我正在使用Rails 2.3.14上运行的Radiant CMS。 –