ログイン
i-mobile
記事の一覧
4.<[ruby][TMail][rails]... | [rails][ruby]英単語...>6.

2007-12-19

[]あるUTF-8の文字列をiso-2022-jpに変換(NKF.nkfなどで)して、メールの件名に使うとヘッダが崩れる Add Star

●崩れる原因

変換後の文字列に「\n」が入り、これが改行とみなされてヘッダが崩れる。

例)

・encode.rb

require "base64"

def encode( str )
  "=?iso-2022-jp?B?" + Base64.encode64( NKF.nkf( '-j --utf8-input', str ) ).chomp + "?="
end

#文字コードはUTF-8
str = "あいうえおかきくけこさしすせそたちつてと"
p encode( str ) #=> "=?iso-2022-jp?B?GyRCJCIkJCQmJCgkKiQrJC0kLyQxJDMkNSQ3JDkkOyQ9JD8kQSREJEYkSBso\nQg==?="

↑変換後に「\n」の文字列が入っているので、これをメールの件名に利用すると、改行されてしまうので「\n」以降の文字列がメールの本文に入ってしまう。


●解決策

「\n」を「\\n」のようにエスケープすれば良い。

例)

・encode.rb

require "base64"

def encode( str )
  "=?iso-2022-jp?B?" + Base64.encode64( NKF.nkf( '-j --utf8-input', str ) ).chomp + "?="
end

#文字コードはUTF-8
str = "あいうえおかきくけこさしすせそたちつてと"
p encode( str )                         #=> "=?iso-2022-jp?B?GyRCJCIkJCQmJCgkKiQrJC0kLyQxJDMkNSQ3JDkkOyQ9JD8kQSREJEYkSBso\nQg==?="
p encode( str ).gsub(/\n/,'\\n') if str #=> "=?iso-2022-jp?B?GyRCJCIkJCQmJCgkKiQrJC0kLyQxJDMkNSQ3JDkkOyQ9JD8kQSREJEYkSBso\\nQg==?="

↑「\\n」とエスケープされているので、改行されず、正しく件名が表示される。


●はまりポイント

・・・
p encode( str ).gsub(/\n/,'\\n') if str 

nil.gsub(/\n/,'\\n')はエラーなので、if str は、 strが nil の時にエラーが起こらないようにするためのものである。

▼名前
▼内容
▼画像認証

4.<[ruby][TMail][rails]... | [rails][ruby]英単語...>6.
●ウェブ検索●