簡體   English   中英

Rails 2.3.9查詢參數編碼

[英]Rails 2.3.9 Encoding of Query Parameters

是否可以使用rails將查詢參數解碼為utf8。

如果我有像/ foo這樣的東西?param =£

我嘗試訪問控制器中的參數,參數編碼為ASCII-8BIT。 這會導致許多事情破裂,因為很多其他字符串都是UTF-8編碼而ruby不喜歡混合編碼。

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

這個解決方案取自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

請務必查看文章中的其他提示,尤其是視圖中的魔術評論。 再次感謝Jason。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM