• 締切済み

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に変更すれば、問題なく受渡しできて、文字化けにならずにメール送信ができますでしょうか。 又、できれば入力ページと確認ページのキャラセット等を変えずに、終了ページのコード変更だけで解決するにはどうすれば宜しいでしょうか。 宜しくお願い申し上げます。

  • PHP
  • 回答数3
  • ありがとう数5

みんなの回答

回答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

  • PHPで受ける文字コードは何に依存する?

     例えばmb_convert_encoding()で変換するとき、元の文字コードは何に依存されるのでしょうか?  フォームで送る場合は、フォームページのHTMLのでmetaタグに指定されている文字コードになるんでしょうか?  charset=utf-8とmetaタグで指定されている場合、PHPのmb_convert_encoding()で受け取るときの変換前の文字コードはutf-8?  データをutf-8で扱いたいとき、フォームページをcharset=utf-8で作っておけば、mb_convert_encoding()でわざわざutf-8に変換するようにしておかなくても大丈夫ですか?

    • ベストアンサー
    • PHP
  • Webサイトで文字化けするのですが、、

    Webサイトを作成している初心者です。 metaタグの「Charset」の属性について質問します。 参考書では、<meta charset="UTF-8">でうまくいくように例示されているのですが、 私のPCで同様に入力するとページ全体が文字化けします。 <meta charset="Shift-JIS">とすると日本語を正しく表示します。 原因はどこにあるのでしょうか? よろしくお願いします。

  • 文字化けを解決したい

    サイトを持つ管理人です。タグなどについてはかなり初心者です。 iPhoneなどの海外OSから閲覧すると文字化けしてしまうという報告を受けて、タグを色々いじっています。 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">を追加してみたのですが、これ単品だと私のPCから閲覧したときに文字化けしてしまいました。 そのため<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">と<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">を並べてみたのですが、これで海外OSからも文字化けを起こさなくなったのでしょうか? こんな感じのタグです↓ <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <META NAME="GOOGLEBOT" CONTENT="NOINDEX, NOFOLLOW,NOARCHIVE"> <META NAME="ROBOTS" CONTENT="NOARCHIVE,NOINDEX,NOFOLLOW"> <meta name="viewport" content="width=380, maximum-scale=1.6" /> <title>練習</title> </head> 全てのスマホからもサイトを閲覧出来るようにするにはどうしたら良いでしょうか?それとも、全てのスマホから文字化けを防ぐことは不可能なのでしょうか? お知恵をお貸しください。

  • Dreamweaverでソースが文字化けしてしまいました。

    Dreamweaverでソースが文字化けしてしまいました。 メタタグが <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> になってたので、 <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> に修正して、保存して終了したあとに、再度Dreamweaverで開いたところ、ソースが全部文字化けしてしまいました。 元に戻そうと、メタタグをもとのutf-8に戻しても直りません。 メタタグをShift_JISにして、ページプロパティのエンコーディングをShift_JISに合わせると、ソース全部が文字化けしていた状態は直ったんですが、ところどころ文字化け状態のままになっています。 完全にもとの状態に戻したいのですが、どうしたら文字化けが直るのでしょうか。 教えてください。 よろしくお願いします。

  • phpのmb_send_mailで携帯のみ文字化け

    PHPのmb_send_mail関数でメールを送信しています。 メールサーバーはGoogleAppsのを使っています PHPのバージョンは5.1.6 --- 下記ソース --- //日本語と内部文字エンコードの指定 mb_language('ja'); mb_internal_encoding('UTF-8'); $parameter = "-f hoge@example.co.jp";//return_path設定 // ↓コレだと携帯では文字化けしないが、Gmailへ送信すると文字化け //$subject = mb_encode_mimeheader(mb_convert_encoding($subject,"JIS","UTF-8")); $header = ""; $header .= "From: {$subject}<{$from}>"; $message = str_replace("\r", "", $message); $res = mb_send_mail($to, $subject, $message, $header, $parameter);

    • ベストアンサー
    • PHP
  • 文字化けに関して

    文字化けが起きてしまって困っています。 PHPとMysqlを使用した、CMSを今あるサーバから別のサーバに移したいのですが、 新しいサーバに移すと文字化けをしてしまいます。 正確にはデータベースから読み込んでいる部分だけが文字化けしています。 index.phpにHTMLコードとして記述してある部分は文字化けしていません。 ブラウザ(IE)の「表示→エンコード」からUTF8を選ぶと逆に データベースの部分が正確に表示され、HTMLに直接書き込んだ部分が文字化けします。 現状でわかる範囲で書きます。 ・index.phpのmetaは <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" /> ・MYSQL(phpmyadminに書かれている)文字セットは UTF-8 Unicode (utf8) ・php.iniの設定 mbstring.language・・・japanese mbstring.internal_encoding・・・UTF-8 mbstring.encoding_translation・・・on mbstring.http_input・・・未設定 mbstring.http_output・・・未設定 default_charset・・・未設定 output_handler・・・未設定 output_buffering・・・未設定 magic_quotes_gpc・・・Off 詳しい方よろしくお願いします。

    • ベストアンサー
    • PHP
  • Webページの文字化け

    ホームページを作っていますが、友人から一部のページが文字化けすると言われました。あららしく作ったページには文字コード指定の記述(下記)を入れていますが、古いページには入れていません。 <meta http-equiv="content-type" content="text/html; charset=SHIFT_JIS"> どうやらそれが原因のようですが、HPの最上位、iindex.html文には下位記述を加えていますが、その効力は下位のhtml文には及ばないのでしょうか。 すべてにmetaタグを付けるか、utf-8に置き換えればいいのだとは思いますが、ページが多すぎて手が及びません。なにかいい手はないでしょうか?

  • 文字化け

    HPを少しずつ作っているのですが、少しだけできたのでyahooのところにアップしてみました。しかし文字化けしてしまいました(涙) <META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=Shift_JIS"> このタグが関係あるのでしょうか? IE6

  • 機種依存文字

    いつもお世話になっております。 機種依存文字について質問させていただきます。 CSVファイルをアップロードして、文字コードがEUCのデータベースに 格納したいと思っております。(PHPの文字コードもEUCになっております。) 「(はしごたか)」「(たつさき)」などの機種依存文字が 文字化けをしてしまいます。 $name = mb_convert_kana(mb_convert_encoding($data[1], "EUC-JP", "Shift-JIS"), "KV") $name = mb_convert_kana(mb_convert_encoding($data[1], "eucJP-win", "Shift-JIS"), "KV") としても文字化けをしてしまいます。 また、以下の設定をしても文字化けは解消されません。 ini_set('default_charset', 'eucJP-win'); ini_set('mbstring.http_output', 'eucJP-win'); ini_set('mbstring.internal_encoding', 'eucJP-win'); 皆様、ご提示お願いいたします。 よろしくお願いいたします。 <環境> OS:Red Hat Linux PHP:Version 4.3.1 DB:MySQL 3.23.56

    • ベストアンサー
    • PHP
  • xml宣言の文字コード変更

    xhtmlとcssでのコーディングを行った際、途中で「UTF-8」で作成してと言われました。 そのため、作成していたコードの冒頭をshift_jisからUTF-8にかきかえてみたところ、文字化け。ブラウザの表示をUTF-8に変えても化けたままなので、作業にならんと宣言をshift_jisに戻しました。 が、書き換えても文字化けが直りません。 宣言自体を消して保存しなおしたりもしたのですが、以前文字化けたままです。 テキストエディタで見るとちゃんとshift_jisになっているのですが、 これはどうすれば直るものなのでしょうか? 手を入れたのは以下の二行になります。(抜き出してるだけですので実際はheadタグ等を挟んでいます) 初期 <?xml version="1.0" encoding="shift_jis"?> <meta http-equiv="content-type" content="text/html; charset=shift_jis" /> ↓ UTF-8に書き換え <?xml version="1.0" encoding="UTF-8"?> <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> ご教授ねがいます。

専門家に質問してみよう