[FYI] PHP でメールを送ると subject が文字化けする


いやー、ハマりました。PHP でメールを送ると subject ‘だけ’ が文字化けする。
php メール 文字化け Subject みたいなもんでぐぐるとめっちゃくちゃでてくるわけで。
のほほんと、対策なんて簡単だろうと考えていたら…いやあ、どハマりでした。

だいたいどこにでも書いてあるのは、mb_convert_encoding 使ってプログラムの文字エンコードから ISO-2022-JP に変換する方法。
ええ、腐るほどやりましたよ。それでも文字化けする。mb_language と mb_internal_encoding を適切に設定ってのも勿論やりました。これもダメ。mb_language() は ja とか japanses とか uni にしろとか、もう何が何だか判らない。
プログラムファイルの文字コードも s-jis や utf-8 にしたけどダメ。BASE64にしたら?みたいなのもあったので、UTF-8 -> BASE64 -> ISO-2022-JP 変換もやりましたがダメ。

いい加減諦めていたんですが、ようやく文字化けしないノウハウにぶつかった。ちなみに PHP 5.2 系の話。

mb_encode_mimeheaderの都市伝説を検証する CPA-LABテクニカル 様

技術的な事は全く判らない(笑)ので、詳細は上記ノウハウにお任せするとして、結果的にこうしました。
プログラムは utf-8 で書いています。サンプルなんで適当に。

mb_language(“uni”);
mb_internal_encoding(“utf-8”);
$subject = “テスト”;

$subject = mb_convert_encoding($subject,’utf-8′,mb_detect_encoding($subject));
$subject = mb_encode_mimeheader($subject,’iso-2022-jp’);

ちなみに、本文は
$message = mb_convert_encoding($message,”iso-2022-jp”,”utf-8″);
であっさり通りました。ヘッダに multipart/mixed 書いてbase64_encode した添付ファイルも正常に受け取れました。

というか。
自分はプログラマじゃないって!
ネットワークエンジニアにプログラム組ませるのはやめようよ!(笑)

[FYI] PHP でメールを送ると subject が文字化けする” への2件のフィードバック

  1. はまっていた所、これで解決できました。
    助かりました。

  2. 随分昔の記事だったので、テーマを変えたら見難くなって申し訳ございません。。
    文字コード関係は誰しもハマる場所なので、記事が役立ってよかったです。

コメントを残す

メールアドレスが公開されることはありません。