ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Let's PHPコミュのphp mail関数

  • mixiチェック
  • このエントリーをはてなブックマークに追加
はじめまして!phpを始めてまだ半年足らずの新米プログラマです。

phpでmb_send_mail関数を使い携帯PCにメールを送っているのですが、特定の文字がsubjectのみで文字化けします。他header,footer等は同じ文字を使っても問題なく日本語表示になります。ファイルはshift-jisで編集しています。文字列はmb_convert_encodingを使いeucに変換してます。

例で言いますと「お知らせ」とsubjectに指定すると「j知らせ」という表示になります。同じ「お知らせ」をbodyに書いても文字化けは起こりません。色々調べてみたのですが原因がわからないのでどなたかお分かりになる方いらっしゃいましたらご教授お願致します。

コメント(9)

mb_internal_encoding("SJIS");
とか付けてみたらどうですか?

自分はコレでうまくいってますよ!
昔悩んで散々GOOGLEで探してたどり着いた答えです。

あまりちゃんと読んでないので答えになってなかったら
ごめんなさいねぇ。
inoken様返答ありがとうございます。

それは私も試みましたがダメでした。
他にも↓

mb_detect_order('ASCII,JIS,EUC-JP,UTF-8,SJIS');
mb_http_output('SJIS');

等もやってみましたが、やはりsubjectに特定の文字が入ったときにだけ文字化けしてしまします。
バージョンその他環境等も書いた方が
答える側も答えやすいかと。
たとえば4.40の場合こんなバグがあるみたいです。
https://www.drive.ne.jp/iMA/showmail.pl?PHP-users=26184
↓解決法
https://www.drive.ne.jp/iMA/showmail.pl?PHP-users=26186
hotmailはsubjectに何を指定しても化けた記憶があります。
後ベッキーで受信した場合OKでもoutlookで字化けとか
subjectは環境依存激しいです。
殆どが、半角文字との境目の全角文字先頭で発生するようです。
なんだかいろいろ考えるのがめんどくさいときは、全角文字先頭に全角空白を入れます。
> $subject = base64_encode(mb_convert_encoding($subject, "JIS", "EUC"));
> $subject = '=?ISO-2022-JP?B?' . $subject . '?=';

びみょーにこれは正しくありません。
ほぼあってはいるのですが、厳密にしたがうと
何文字めで改行しなくちゃならない、とか色々ルールが
でてきます。
これだとすごい長いタイトルのとき、不具合が
でてくるはずです。
mb_encode_mimeheaderに投げるのが無難です。
海外では使用しないiso-2022-jpコードのため、
どうしても複雑になるのです。

あとメールではなるべくiso-2022-jpを用いるようにしましょう。
携帯を反面教師に(´ー`)
たくさんの回答、ご教授ありがとうございました。YAS様からの回答によりjisに変換することで解消されました。お忙しいところ皆様ありがとうございました!

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Let's PHP 更新情報

Let's PHPのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング