プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
PHP、PHPMailerで長い件名が文字化けする。
添付ファイル付きのメールフォームをPHPで作りましてね。
PHPMailerを使ってみたのです。

初めて使ってみたのですが思ったより楽。
そのまんまなサンプルがいっぱいあったので
パクってきてこんなんしてみましたよφ(--)

  //ライブラリ読み込み
  require(dirname(__FILE__) . "/class.phpmailer.php");

  //言語設定、内部エンコーディングを指定する
  mb_language("japanese");
  mb_internal_encoding("UTF-8");
 
  $to = "to@hoge.hoge"; //宛先
  $subject = "件名"; //件名
  $body = "本文です。"; //本文
  $from = "from@hoge.hoge"; //差出人
  $attachfile = "./hoge.zip"; //添付ファイルパス

  $mail = new PHPMailer();
  $mail->CharSet = "iso-2022-jp";
  $mail->Encoding = "7bit";

  $mail->AddAddress($to);
  $mail->From = $from;
  $mail->FromName = "";
  $mail->Subject = mb_encode_mimeheader(mb_convert_encoding($subject,"JIS","UTF-8"));
  $mail->Body  = mb_convert_encoding($subject,"JIS","UTF-8");
 
  //添付ファイル追加
  $mail->AddAttachment($attachfile);
 
  if(!$mail->Send()){
      throw new Exception("error:". $mail->ErrorInfo);
  }



完了\(--)/
と思ったらひとつ弱点がありまして、長い件名が文字化けするのです。
「Webサイトからのお問い合わせがございました。」ってな件名が
「Webサイトからのお問い合わせがございまし$?!#」になりやがった。

ふぁっきゅー。

ほんであれやこれやと調べて「mb_encode_mimeheader()」と
「mb_internal_encoding()」と「mb_convert_encoding()」の関係とか
いろいろと諸説があったりなかったりするのが分かりました。

ついでに勝手に改行が入ってうんちゃらとか
規約がかんちゃらとかあるようですが、
面倒臭いのでそこら辺は華麗にすっ飛ばして

  $mail->Subject = mb_encode_mimeheader(mb_convert_encoding($subject,"JIS","UTF-8"));



  $mail->Subject = mb_encode_mimeheader($subject,'ISO-2022-JP');

にしたら無事に件名が文字化けしなくなりましたよ。
完了\(-∀-)/



ホントに良いのかは実は分からんけど
取りあえずちゃんと動いてるから良しとする。
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:● PHP  thema:システム開発 - genre:コンピュータ  Posted by ササキマコト 

  関連記事