読者です 読者をやめる 読者になる 読者になる

[Rails] 入力フォームの値でソフトバンクだけ文字化ける

以下のような項目で値を入力

名字  [ほげ]
名前  [てす]
[Submit]

そしてSubmitするとソフトバンクの携帯だけ以下のように文字化けた。

名字  [ほげ]
蜷前  [てす] ← ここ!!

調査すると、ソフトバンクの場合だけ、Railsコントローラーにわたってくるパラーメタの値が、utf8でなくなんか文字化けてた。
なので、以下のような処理をかましてやり、utf8に変換して最後response出力時に、sjisに変換してやればオK

class HogeController < ApplicationController
  after_filter :to_sjis
      :
      :
  def confirm
    # ソフトバンク対応。フォームの入力値が化けるため、
    # 全てutf8に変換してから処理する
    rtn_attrs = []
    params[:hoge].each do |attr|
      # attr[1] = attr[1].toutf8 if !attr[1].blank?
      # toutf8だと携帯の半角カナが文字化けするので kconvでちゃんと指定
      attr[1] = attr[1].kconv(Kconv::UTF8,  Kconv::SJIS) if !attr[1].blank?
      rtn_attrs.push(attr)
    end
    @hoge = Hoge.new(Hash[*rtn_attrs.flatten])
         :
         :
  end

  private
  def to_sjis
    headers["Content-Type"] = "text/html; charset=Shift_JIS"
    response.body = response.body.tosjis
  end