重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

PHP初心者です。メール送信プログラムを作成しました。
色々調べて、
//表・予・申・能・十・ソなど特殊漢字の後につく\マークを削除
変数 = stripslashes(変数);
でエンマークはとれたのですが、また新たな問題が発生してしまいました。
例えば、山本という名前でフォーム入力すると本という文字が文字化けしてしまいました。送信者名は文字化けしていないのにメールの中身の本という文字が文字化けしてしまいました。どなたか助けてください。

A 回答 (2件)

真ん中下あたりの


>$s_msg = mb_convert_encoding($s_msg,"JIS","SJIS");
ここでJISコードに変換しているにも拘らず、その下の
>$s_msg = stripslashes($s_msg);
で本来は必要な'\'を取り除いてしまっているのです。
「本」のJISコードは0x4b5c、つまり"K\"ですから当然コードが変化してしまいます。
送信者名が化けないのは、この処理を$from対して行っていないためです。

変数内の文字コードと文字列の状態を理解しながらプログラミングすると良いでしょう。
それと、マルチバイトメール送信関数
>mb_send_mail($sendto, $subject, $s_msg, $from);
では、本文及び標準のヘッダに含まれるSubjectは"内部文字エンコードで渡し"ます。
追加ヘッダ($from)は"メール用にエンコード"した上で、適切なフォーマットで渡します。
追加ヘッダのエンコードにはmb_encode_mimeheader()を使えば、メール向けの適切なフォーマットで返してもらえます。

参考URL:http://jp2.php.net/manual/ja/function.mb-send-ma …
    • good
    • 0
この回答へのお礼

ありがとうございます。数日前にこれに気づき解決いたしました。
でもひとつひとつ関数の意味を理解していなかったのでnataruyさんのご回答でなぜそうなったのかようやく意味がわかりました。本当にありがとうございました。

お礼日時:2006/12/26 09:16

どういう処理をいれているのでしょうか?


送信者や件名などはISO-2022-JP形式、
本文は7bitJIS形式にきちんと変換していますか?

この回答への補足

早速のご回答ありがとうございます。
以下の内容でメール送信しています。ちなみにこの上でfopenでlogを残していますがそちらには文字化けせず残されているのでメール送信用プログラム内で何か追加しなければいけないんだと思いますが、調べていても答えがみつかりません。お願いします。
//----------------ここから管理者宛にMAIL送信------------------------//
$subject="お問い合わせがありました!";
$subject=mb_convert_encoding("$subject","JIS","SJIS");
$subject=mb_encode_mimeheader($subject);
//表・予・申・能・十・ソなど特殊漢字の後につく\マークを削除
$content = stripslashes($content);
$name = stripslashes($name);
$s_msg="以下の内容でお問い合わせ・資料請求がありました。
迅速な対応をお願いいたします。\n
_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄\n
■お名前:${name}
■ふりがな:${name2}
■メール:${e_mail}
■生年月日:${birth_year}年${birth_month}月${birth_day}日
■お問い合わせ:\n${content01}\n
_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄\n
|お問い合わせフォーム|\n
\n";
$s_msg = mb_convert_encoding($s_msg,"JIS","SJIS");
mb_internal_encoding("SJIS");
mb_language("Japanese");

$from="${name}";
$from=mb_convert_encoding("${from}","JIS","SJIS");
$from = base64_encode($from);
$from = "=?ISO-2022-JP?B?" . $from . "?=";
$from = "From: \"".$from. "\"" . "<" . "$e_mail" . ">";
//表・予・申・能・十・ソなど特殊漢字の後につく\マークを削除
$s_msg = stripslashes($s_msg);
mb_Language('Japanese');
$sendto = "midori@mosk.co.jp";
mb_send_mail($sendto,"$subject","$s_msg","$from");
//-------------------------------------------------------------------------------------//

補足日時:2006/12/18 15:56
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!