おおいしつかさ


旅行とバイクとドライブと料理と宇宙が好き。
Ubie Discoveryのプログラマ。
Share:  このエントリーをはてなブックマークに追加

hidden要素の内容をPOSTすると、改行が半角スペースになってしまうときの対処

確認画面などを経由して投稿するシステムを作るとき、たいていはデータをhidden要素に入れてPOSTすると思います。このとき、value値の中の改行が半角スペースに変換されてしまうことがあります(特に携帯とか)。
いろいろ対処方法はあると思うのだけど、僕は単純に改行コード自体を特殊な記号に変換しておいて、POSTの受付側でそれをデコードするという方法をよく使います。

とあるviewで、

<% @article.body = return_code(@article.body) %>  
<%= hidden_field :article, :body %>  

みたいにしておいて、POSTの受け側のアクションで

params[:article][:body] = return_code(params[:article][:body], :decode)  

というように、処理の前にデコードしておきます。
return_codeメソッドは

  def return_code(text, mode = :encode)  
    if mode == :encode  
      text.gsub("\r\n", "[kaeru:ret-rn]").gsub("\r", "[kaeru:ret-r]").gsub("\n", "[kaeru:ret-n]")  
    elsif mode == :decode  
      text.gsub("[kaeru:ret-rn]", "\r\n").gsub("[kaeru:ret-r]", "\r").gsub("[kaeru:ret-n]", "\n")  
    else  
      text  
    end  
  end  

こんな感じ。app/controller/application.rbで定義しておいて、

helper_method :return_code  

と宣言しておけばcontrollerでもviewでもどこでも使えます。