携帯のための漢字コードフィルター

masuidriveさんがKeitaiFilterってのを自作してくれていて、
around_filterで使うと便利そうだ。

require 'nkf'

class KeitaiFilter
  def before(controller)
    controller.params = to_internal(controller.params)
    controller.headers['Content-Type'] = 'text/html; charset=Shift_JIS'
    controller.headers['Pragma'] = 'no-cache'
    controller.headers['Cache-Control'] = 'no-cache'
    controller.headers['Expires'] = 'Thu, 01 Dec 1994 16:00:00 GMT'
  end

  def after(controller)
    if controller.headers['Content-Type'].include? 'text/html'
      controller.response.body = NKF.nkf('-m0 -x -s -W', controller.response.body)
    end
  end

  def to_internal(hash)
    hash.each_pair do | key, value |
      if value.is_a? String
        hash[key] = NKF.nkf('-m0 -x -S -w', value)
      elsif value.is_a? Hash
        hash[key] = to_internal(value)
      end
    end
    return hash
  end

  def self.to_external(str)
    NKF.nkf('-m0 -x -s -W', str)
  end
end

使い方は後日書きます。