dT*blog

design and programming

メールの長い件名が文字化けするときは

perlで書いたメールフォームで、件名をめっちゃ長くしてみたら文字化けした。

my $subject = MIME::Base64::encode($mailsubject);
chomp $subject;
$subject = "=?ISO-2022-JP?B?$subject?=";

なんじゃろうと思って調べてみると、原因はMIME::Base64のエンコード処理だった。たぶん基本的なことだと思うのだけど、今まで支障がなくて気付かなかった。ううう。

encode_base64関数は、以下のような動きをするのが仕様。

返されるエンコードされた文字列は76文字を越えないように分割され、空文字列でなければ$eolが最後に付きます。もしエンコードされた文字列を複数の行に分割したくない場合は、2番目の引数として空白の文字列を渡してください。

要は、長い件名にしちゃうと勝手に改行コード入れちゃうから文字化けするって話。改行されたくなかったら、第2引数に空文字を指定しましょう、と。引数2つ取れることなんて、知らなんだ。無知は怖い。まんじゅう怖い。お茶も怖い。

ということで、以下のようにしてアッサリ解決。

my $subject = MIME::Base64::encode($mailsubject, "");

ちゃんとドキュメント読まないとダメってことですな。

Posted by dT by 12:27 | Comments (0) | TrackBacks (0)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31