フォームから携帯用メールを送信するCGIをPHPで実装したのですが、

SoftBankの絵文字が変換できません。機種はSB841SHです。
Subjectは絵文字変換されるのですが、
本文が「$Gi」のようにWEBコードの一部がが表示されます。
Webコードを本文に埋め込み、base64でエンコードしています。
ソースはShift_JISで作成しています。
機種に問題があるのか、実装に問題ががあるのか
わかる方がおりましたらご教示ください。

実装はこんな感じです。
$subject = '$Gj絵文字入り題名$Gi';
$body = '絵文字入りの$Gj本文$Gi';
// MIMEエンコーディング
$subject = "=?shift_jis?B?" . base64_encode($subject) . "?=";
$body = base64_encode($body);
// ヘッダ
$headers = "From: " . $from . "\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: text/plain; charset=Shift-JIS\n";
$headers .= "Content-Transfer-Encoding: base64";
// メールを送信
$res = mail($to, $subject, $body, $headers);

回答の条件
  • 1人30回まで
  • 登録:
  • 終了:2011/06/06 22:20:08
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:deflation No.1

回答回数1036ベストアンサー獲得回数126

ポイント100pt

以下のようにエンコードをISO-2022-JPに変更してみてください。


// MIMEエンコーディング
$body = base64_encode($body);
$body = mb_convert_encoding($body,"ISO-2022-JP","Shift_JIS");

// ヘッダ
$headers = "From: " . $from . "\n";
$headers .= "MIME-Version: 1.0\n";
$header  .= "Content-Type: text/plain;charset=ISO-2022-JP\r\n";
$header  .= "Content-Transfer-Encoding: base64";
id:macro_01

回答ありがとうございます。

回答の通り実装してみたのですがやはり本文が正しく表示できませんでした。

Gj{Bi

と表示されていました。

2011/05/31 09:28:07

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません