Rails 2.3.9 Кодирование параметров запроса - PullRequest
1 голос
/ 25 ноября 2011

Возможно ли получить рельсы для декодирования параметров запроса в utf8.

Если у меня есть что-то вроде / foo? Param = £

И я пытаюсь получить доступ к параметру в моем контроллере, параметр закодирован как ASCII-8BIT. Это приводит к тому, что многие вещи ломаются, потому что многие другие наши строки кодируются в UTF-8, а ruby ​​не любит смешивание кодировок.

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

1 Ответ

3 голосов
/ 14 декабря 2011

Это решение взято из блестящей статьи на http://jasoncodes.com/posts/ruby19-rails2-encodings

Спасибо Джейсону Уэстену за это!

Если вы работаете с 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

Обязательно ознакомьтесь с другими советами в статье, особенно в отношении магических комментариев в представлениях.Еще раз спасибо Джейсон.

...