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

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

Let's PHPコミュのPHP の mail()、文字化け

  • mixiチェック
  • このエントリーをはてなブックマークに追加
$to = 'abc@gmail.com';

$name = htmlentities($_POST['name']);
$email = htmlentities($_POST['email']);
$message =htmlentities($_POST['message']);

。。。。。

mail($to, "Contact Form", $message, $header);

以上のPHPを書いたんだけど、日本語でメッセージを送ったら、文字化けです。英語で送ったら、大丈夫です。困っています。
utf8_encodeなど使ったこともありますが、まだ文字化けです。誰かわかったら、教えていただけませんか。ありがとう。

コメント(11)

マルチ乙

質問するまえに自分の行動を見直しましょう
日本語のメールってUTF8で送るものでしょうか?
ぐぐったらナンボでも出てきそう>サンプル
http://mixi.jp/view_bbs.pl?id=22096538&comm_id=650
ラスユキ Ver 1.5α<<< もちろん、質問の前には自分で何回にやってみたことがありますね。先生にも聞いたんだけど、かれらは英語しか使わないので、このことはあまり知ってませんが。。

たけまる<<ありがとう。あそこへ聞いてみるんです。
 楽に日本語を含むメールを送る場合はmb_send_mailという関数がありますれど、そちらは試されましたか?

 mb_languageもきちんとJapaneseにしてください。
蛇足ですが(汗

「メールだけ」を考えたらhtmlentitiesを使うのは如何なものかと思います。確認表示などでブラウザに返すときは必要でしょうけど。
日本語ネイティブな人なら一蹴したい質問ですけど、プロフィールを見るとそうもいかないようですね。


日本語の環境は中国語同様、3つのエンコード+UTF-8があり、最近のメーラーは優秀なのでUTF-8で送受信しても何の問題もないことが多いですが、PC向けは基本的にJIS(iso-2022-jp)推奨です。
ただ、携帯電話は特殊で、Shift_JISで送信した方がいいこともあります(絵文字が使える)

広東語が使える環境なら、マルチバイト関数(mbstring関数)が使える環境が入っているはずですが、カナダなんかのサーバだと入ってないのでしょうか。使えるなら、単純なメールはmail()の代わりにmb_send_mail()を使えば簡単に送れます。こちらはmb_send_mail()で検索すればすぐサンプルが見つかるでしょう。

使えないようなら、XOOPとかJoomla(Mambo)、symfonyに採用されているphpmailerを使ってみるのも手です。マルチバイト関数と関係なく日本語対応できます。

現行バージョンは試していませんが、以前のバージョンだとSubject、Fromあたりのエンコード方式が日本語のメールでよくつかわれている方式(BエンコードとかQエンコードの組み合わせ方)と異なるので、文字化けしていた覚えがあります。
mb_encode_mimeheaderを使えばすぐ解決しますが、使えなくても、base64_encode()を使えば何とかなるみたいです。
参考になりそうなのは以下。
http://xoopscube.jp/modules/newbb/viewtopic.php?topic_id=1566&forum=11&post_id=10981

多言語混在が前提でUTF-8で送るなら、「UTF-8 PHP メール」で検索するといいと思います。

以前はmbstringが使えないサーバ用のマルチバイト関数のライブラリとかあったのですが、最近見かけないですね。自作のサーバならmbstring関数を有効に設定を変える、レンタルなら有効にしてもらうのが一番簡単でしょう。

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

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

Let's PHP 更新情報

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

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

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