PHPメールフォームでの文字化けに苦しんでいます。
レンタルサーバー(ファーストサーバ)でPHPのメールフォームを作っています。
PHPフォームから出力される送信確認画面と、送られるメールで特定の文字が
(例えば「契」が「啓」に)化けてしまいます。
色々調べて出来る対策はしたのですが一向に分かりません。
どうやれば文字化けが直るか具体的に教えてください。
文字化け対策用に.htaccessをディレクトリに入れています。
.htaccessの中身
php_flag mbstring.encoding_translation off
php_value default_charset "Shift_JIS"
PHPフォームのメイン処理部分です。
<?php header("Content-Type: text/html;charset=Shift_JIS");
~~~省略~~~
$body=mb_convert_encoding($body,"Shift_JIS","ASCII.JIS,UTF-8,EUC-JP,SJIS");
$subject="=?iso-2022-jp?B?".base64_encode(mb_convert_encoding($resubject,"Shift_JIS","ASCII.JIS,UTF-8,EUC-JP,SJIS"))."?=";
if($from_add == 1) {
$from = $_POST['E-mail'];
$header="From: $from\nReply-To: ".$_POST['E-mail']."\nContent-Type: text/plain;charset=iso-2022-jp\nX-Mailer: PHP/".phpversion();
} else {
$header="Reply-To: ".$_POST['E-mail']."\nContent-Type: text/plain;charset=iso-2022-jp\nX-Mailer: PHP/".phpversion();
}
mail($mailto,$subject,$body,$header);
else { htmlHeader();
?>
<!-- 送信確認 -->
間違いがなければ送信ボタンを押してください。<br><br>
<form action="form.php" method="POST">
<? echo $err_message; ?>
<table width="500" bgcolor="#cccccc" cellspacing="1" cellpadding="3">
<?php
foreach($_POST as $key=>$var) {
if(get_magic_quotes_gpc()) $var = stripslashes($var);
$var = htmlspecialchars($var);
print("<tr bgcolor=#ffffff><td bgcolor=#eeeeee width="."125"." ><small><div style = line-height:0.5>".$key."</small></td><td><small>".$var);
?>
<input type="hidden" name="<?= $key ?>" value="<?= $var ?>">
<?php print("</div></small></td></tr>\n");}?>
~~~後処理省略~~~
よろしくお願いします。
お礼
お礼が遅れてすいません。 回答ありがとうございます。 教えていただいたURL、大変参考になりました。 さっそくすべてSJISで作ってみました。 ですが、やはり「本」の文字だけが、どうしても文字化けしてしまいます。 SJISにした場合「日本丸」なら、文字化けしますが、「日丸」なら正しく表示されます。 どの様に対応すれば良いでしょうか?もし何か情報をお持ちの方、いらっしゃればぜひ教えて下さい。