電子書籍の厳選無料作品が豊富!

フォーム⇒ (1)確認  ⇒ (2)送信 と3つに分けて、phpファイルに書きました。

ためしに、送信してみると、成功はするものの、文字が化けてメールの内容が分かりません。
分からないので教えてください。


フォーム ↓

<form method="POST" action="kakunin.php">
<table border="0">
<tr>
<td >お名前</td>
<td><input type="text" name="name" size="20"></td>
</tr>
<tr>
<td>メールアドレス</td>
<td><input type="text" name="from" size="20"></td>
</tr>
<tr>
<td>メールタイトル</td>
<td><input type="text" name="title" size="20"></td>
</tr>
<tr>
<td>メッセージ</td>
<td><textarea rows="5" name="naiyou" cols="40"></textarea></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value=" お問い合わせ内容を確認 "></td>
</tr>
</table>
</form>




(1) kakunin.php ↓ 入力フォームから情報を受け取り確認


<?php
// フォームの値を取得します。
if ($_SERVER["REQUEST_METHOD"] == "POST") {
foreach($_POST as $k => $v){
// 「magic_quotes_gpc = On」のときはエスケープ解除
if (get_magic_quotes_gpc()) {
$v = stripslashes($v);
}
$v = htmlspecialchars($v);
$$k = $v;
}
}
else {
exit();
}

// 値をチェックします。
$ErrFlg = 0;
if ($name == "") {
echo "<p>お名前を入力してください。";
$ErrFlg = 1;
}
if ($from == "") {
echo "<p>メールアドレスを入力してください。";
$ErrFlg = 1;
}
if ($title == "") {
echo "<p>メールタイトルを入力してください。";
$ErrFlg = 1;
}
if ($naiyou == "" ) {
echo "<p>メッセージを入力してください。";
$ErrFlg = 1;
}

if ($ErrFlg) {
exit();
}



?>
内容を確認して送信ボタンをクリックしてください
<form method="POST" action="mail.php">
<table border="0">
<tr>
<td width="100">お名前</td>
<td width="300"><?php echo $name?></td>
</tr>
<tr>
<td width="100">メールアドレス</td>
<td width="300"><?php echo $from?></td>
</tr>
<tr>
<td width="100">メールタイトル</td>
<td width="300"><?php echo $title?></td>
</tr>
<tr>
<td width="100">メッセージ</td>
<td width="300"><?php echo nl2br($naiyou) ?></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="送信"></td>
</tr>
</table>
<input type="hidden" name="name" value="<?php echo $name ?>">
<input type="hidden" name="from" value="<?php echo $from ?>">
<input type="hidden" name="title" value="<?php echo $title ?>">
<input type="hidden" name="naiyou" value="<?php echo $naiyou ?>">
</form>


(2) mail.php ↓のコード 送信


<?php
// メール送信先を指定します。
$to = "xxxxxxxxxx■ gmail.com";


// フォームの値を取得します。
if ($_SERVER["REQUEST_METHOD"] == "POST") {
foreach($_POST as $k => $v){
// 「magic_quotes_gpc = On」のときはエスケープ解除
if (get_magic_quotes_gpc()) {
$v = stripslashes($v);
}
$v = htmlspecialchars($v);
$$k = $v;
}
}
else {
exit();
}

// メール本文を組み立てます。
$naiyou = "お名前:$name\n
メールアドレス:$from\n
タイトル:$title\n
内容:$naiyou\n";

if ($name != "" and $from != "" and $title != ""
and $naiyou != "" ) {
if (mb_send_mail($to, $title, $naiyou, "From:$from")) {
echo "メールを送信しました";
}
else {
echo "メール送信失敗です";
}
}
?>

A 回答 (1件)

全てのファイル及びHTMLのcharsetの文字コードは統一していますか?


できればUTF-8で統一したほうが良いかと思います。

ご提示されている構文自体には、特に問題が無いように見えますが、
これはレンタルサーバ等のLinuxで走らせていますか?

もしそうなら、php.iniファイルの設定は、きちんと行っていますか?
設定をしていないければ、

mbstring.internal_encoding = UTF-8
date.timezone = Asia/Tokyo

これをテキストエディタにコピペして、php.iniとしてphpファイルと同じ
ディレクトリに設置してください。

date.timezone = Asia/Tokyo
は、直接関係ありませんが後々date関数等を扱う時に必要になりそうなので、
一応設定しておいたほうが良いと思います。

これでも解決しないようなら、すみません分かりません。
    • good
    • 0
この回答へのお礼

ありがとうございました。 とても参考になりました。
サーバーによって異なるようで、私が使っているサーバーでは、.htaccess による設定で対処できました。

php_value mbstring.language Japanese
php_value mbstring.internal_encoding UTF-8
php_flag short_open_tag 1

この3行で解決ました。 ヒントがなければたどり着きませんでした。感謝します。

お礼日時:2014/03/30 16:33

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