是否可以通过rails将查询参数解码为utf8。
如果我有像/ foo这样的东西?param =£
我尝试访问控制器中的参数,参数编码为ASCII-8BIT。这会导致许多事情破裂,因为很多其他字符串都是UTF-8编码而ruby不喜欢混合编码。
params[:param].encoding == Encoding.find("ASCII-8BIT")
答案 0 :(得分:3)
此解决方案取自http://jasoncodes.com/posts/ruby19-rails2-encodings
的精彩文章感谢Jason Weathered的磨坊!
如果您使用的是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
请务必查看文章中的其他提示,尤其是视图中的魔术评论。再次感谢杰森。