※ ChatGPTを利用し、要約された質問です(原文:PHPで問い合わせフォーム 受信すると文字化けする)
PHPで問い合わせフォーム 受信すると文字化けする
このQ&Aのポイント
PHPの問い合わせフォームで受け取ったメールの内容が文字化けする問題について教えてください。
フォームの情報を受け取り確認するkakunin.phpと、実際に送信するmail.phpの2つのファイルがあります。
問い合わせフォームの値を取得し、メールを送信する処理が書かれていますが、なぜ文字化けしてしまうのかが分かりません。
PHPで問い合わせフォーム 受信すると文字化けする
フォーム⇒ (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 "メール送信失敗です";
}
}
?>
お礼
ありがとうございました。 とても参考になりました。 サーバーによって異なるようで、私が使っているサーバーでは、.htaccess による設定で対処できました。 php_value mbstring.language Japanese php_value mbstring.internal_encoding UTF-8 php_flag short_open_tag 1 この3行で解決ました。 ヒントがなければたどり着きませんでした。感謝します。