Ruby on rails Rails 2.3.9查询参数的编码

Ruby on rails Rails 2.3.9查询参数的编码,ruby-on-rails,utf-8,get,Ruby On Rails,Utf 8,Get,可以让rails将查询参数解码为utf8吗 如果我有像/foo?param=£这样的东西 我尝试访问控制器中的参数,参数编码为ASCII-8BIT。这会导致很多问题,因为我们的许多其他字符串都是UTF-8编码的,ruby不喜欢混合编码 params[:param].encoding == Encoding.find("ASCII-8BIT") 此解决方案摘自 感谢杰森的努力 如果您使用的是Rails 2.3.x系列,则需要创建一个名为config/initializers/utf8_param

可以让rails将查询参数解码为utf8吗

如果我有像/foo?param=£这样的东西

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

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

此解决方案摘自

感谢杰森的努力

如果您使用的是Rails 2.3.x系列,则需要创建一个名为config/initializers/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

请务必查看本文中的其他提示,尤其是有关视图中的魔术注释。再次感谢Jason。

在我的情况下,我不得不使用monkey patch
ApplicationController
而不是
ActionController::Base
。我正在使用运行在Rails 2.3.14上的Radiant CMS。谢谢。还是在2018年,这解决了迁移到ruby 2.x的旧2.3 rails数小时的调查问题