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");}?>
~~~後処理省略~~~
よろしくお願いします。
お礼
hogehoge78様、この度の問題、無事解決いたしました! CPIサーバのデフォルトのPHPの内部文字コードがEUC-JPのため、現在利用しているCPIサーバのPHPの設定ファイルをコピーして、php.iniを作成しました。 そこで、mbstring.internal_encoding をEUC-JPからutf-8へ変更し、mbstring.encoding_translation をOnからOffに変更し、アップロードしたところ文字化けは無事解決いたしました。 この解決に至ったのも、今回hogehoge78様からアドバイスいただいたとおり、コメントアウトしてみたり、プログラムと関連するファイル全ての確認も行ったりしてそれでも変わらず、今一度大元であるサーバーの確認を行った上で調べた結果至りましたので、hogehoge78様の分かりやすく丁寧なアドバイスのおかげだと思っています。 初心者の私に、親身になって対応していただき本当にありがとうございました!感謝いたします! また何かあったときはよろしくお願いいたします^^;