- ベストアンサー
PHPのmailメソッドで件名先頭に*が付く
PHPのメールメソッドで日本語を件名に入れると、件名の先頭に*が付いて送信されてくるのですが、この原因と、付かなくなるようにする方法を教えてください。 メソッドは、以下のようなものです。 よろしくお願いいたします。 mail("xxx@xxx.xxx", "日本語(件名)", "内容", "From: yyy@yyy.yyy")) ;
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
mailメソッドの件名や内容に、多バイト文字を入れてはいけません。 mailメソッドを使う場合は、以下のように、自分でエンコードして、何でエンコードしたのか明示しなければなりません。 mb_internal_encoding("UTF-8"); mail( 'xxx@xxx.xxx', mb_encode_mimeheader('日本語(件名)', 'ISO-2022-JP-MS'), mb_convert_encoding('内容', 'ISO-2022-JP-MS'), "Content-Type: text/html; charset=\"ISO-2022-JP\";\n" ); なお、mb_send_mailを使う場合は mb_language('ja'); mb_internal_encoding("UTF-8"); mb_send_mail('xxx@xxx.xxx', '日本語(件名)', '内容'); のように「直前にオマジナイを入れる必要」があり、オマジナイ無しで mb_send_mail('xxx@xxx.xxx', '日本語(件名)', '内容'); のみだと、内容が文字化けします。
その他の回答 (2)
- agunuz
- ベストアンサー率65% (288/438)
mail関数を使っているとのことですが、php.iniでmbstring.func_overload は 1以上になっているのでしょうか?そうでなければ(mailが)mb_send_mailをoverloadしないのでキチンとmb_send_mailを使わないとダメです。またmb_languageは何になっていますか('ja'なのか'uni'なのかでcharsetがiso-2022-jpかutf-8かが違ってきます)。 まさかmb_send_mailをoverloadしていない状態で日本語を使っている(メーラが何とかして表示しようとしているだけ)ということはありませんよね。生のメールデータがどうなっているか確認してください。
お礼
ご回答ありがとうございます。 確認させていただきます。 ありがとうございました。
- t_ohta
- ベストアンサー率38% (5238/13705)
日本語の入ったメールを送る場合は mb_send_mail() を使うか、ご自身でMIMEエンコード処理した文字列を渡す必要があります。
お礼
ご回答ありがとうございます。 mailメソッドを、mb_send_mailメソッドに変更し、以下の記述を前に追加したところ、指定した通りの文字列が送れました。 ありがとうございました。 mb_language("ja"); mb_internal_encoding("UTF-8");
お礼
ご回答ありがとうございます。 ご回答いただいた内容と同じようにmb_send_mailを用いて記述したところ、指定した通りの文字列が送れました。 ありがとうございました。