Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • 締切済み

PHP 機種依存文字化け mb_send_mail

お世話になります。 PHP初心者です。 メール送信時に機種依存文字(﨑髙濵など)の文字化けを解消したいと考えております。 状況を以下に記載します。 ○お問い合せページを作成 1.入力ページ(metaタグの charset=shift_jis) 2.確認ページ(metaタグの charset=shift_jis) 3.終了ページ(metaタグの charset=shift_jis) ○終了ページ(コード抜粋) mb_language("Japanese"); mb_internal_encoding("SJIS"); $ret = mb_send_mail($to1,$subject,$body1,$header); 上記の場合、文字化け(?)になります。 終了ページのキャラセットをUTF-8に変更し、 mb_language("uni"); mb_internal_encoding("UTF-8"); $ret = mb_send_mail($to1,$subject,$body1,$header); とすると、確認ページから渡ってきたセッションの値が文字化けしていて、 その値をmb_convert_encodingでコンバートしても文字化けしてしまいます。 全ページのキャラセットをUTF-8に変更すれば、問題なく受渡しできて、文字化けにならずにメール送信ができますでしょうか。 又、できれば入力ページと確認ページのキャラセット等を変えずに、終了ページのコード変更だけで解決するにはどうすれば宜しいでしょうか。 宜しくお願い申し上げます。

みんなの回答

回答No.3

回答遅くなりましたが、 mb_send_mail関数は、文字コードをある程度自動的に設定してからメール送信を行う関数になるため、 自分で全部設定してからその自分で設定した文字に従って送るmail関数を利用することで、 意図しない文字コード変換を引き起こさないようにする、というのが趣旨です。 また、質問の内容をちゃんと読んでいなかったようですみません。一旦整理したいんですが・・・ ■HTML/PHPの文字コードについて 今今の時点でWebページを作成されるなら「UTF-8」にするのが定石です。 もし治すことが可能なのであれば、全てUTF-8にしてください。 ■mb_send_mailに関して 全てのエンコードがUTF-8になっているのであれば、質問に記載の書き方の通りで正しく動くと思います。 何らかの理由で動かないようであれば、mail関数で送信する必要がありますが・・・ ■HTML→sjis、PHP→utf-8を崩さないでそのまま行きたい その場合は、最初に回答していただいた回答者さんも行っている通り、sjis-win→utf-8に変換する必要があります。 <?php $subject = $_POST['subject']; //HTMLフォームから受け取ったsjisの値 $body = $_POST['body']; //同様 //とした時に、mb_send_mailに渡す前に・・・・ //文字コードを変換しますが、 //明示的にsjis-win→utf-8に変換することを書く。 //autoの記述は信頼性が非常に低いので可能な限り使いません。 $subject = mb_convert_encoding($subject, "utf-8", "sjis-win"); $body = mb_convert_encoding($body, "utf-8", "sjis-win"); //これが終わったら、質問中に書いてある通りに送る mb_language("uni"); mb_internal_encoding("UTF-8"); $ret = mb_send_mail($to1,$subject,$body1,$header); ?> で行けると思いますがいかがでしょうか。

すると、全ての回答が全文表示されます。
回答No.2

mail関数をご利用されてはいかがでしょう。 http://blogs.yahoo.co.jp/wansa2929/31486033.html こちらで簡単なスクリプトも例示されておりました。

jipang5054
質問者

補足

連絡が遅くなり申し訳ございませんでした。 教えて頂いた内容でうまくいきました。 ありがとうございました。 引き続きのご質問で恐縮ですが、MacOSパソコンでの対処方法をご存知であればご教授の程宜しくお願い致します。

すると、全ての回答が全文表示されます。
回答No.1

SJISではなく、SJIS-WIN(cp932)でmb_convert_encodingを行うことで対応できると思います。

jipang5054
質問者

補足

ご連絡ありがとうございました。 ご指摘の通り、試してみましたが、変化はございませんでした。 「試したコード」 mb_language("Japanese"); mb_internal_encoding("Shift-jis"); echo $body1."<br />"; $body1 = mb_convert_encoding($body1, "SJIS-WIN","auto"); echo $body1."<br />"; $ret = mb_send_mail($to1,$subject,$body1,$header); ※$body1にメールの本文が入っています。  その中に機種依存文字が入っています。 1つ目のechoで$body1内の機種依存文字は文字化けせずにブラウザ上に表示されました。 2つ目のecho(エンコード後)で$body1内の機種依存文字は文字化けしてしまいますので(他の文字は大丈夫です)メールも文字化けが起こってしまいます。 私が何か勘違いやコード記入ミスがあるのでしょうか。 引き続きご指導頂ければ幸いでございます。 何卒宜しくお願い申し上げます。

すると、全ての回答が全文表示されます。

関連するQ&A