- ベストアンサー
文字コード「shift_jis」で作成されたHTML4.01のフォームタグを「XHTML1.0」のサイトに埋め込む方法とPHPファイルの文字化け対策は?
- HTML4.01で作成されたフォームタグをXHTML1.0のサイトに埋め込む方法と、文字化けの対策について教えてください。
- PHPファイルはHTML4.01の時に正常に動作していましたが、XHTML1.0に変更した際に文字化けが発生しています。どの部分を修正すればよいのでしょうか?
- XHTML1.0のサイトにHTML4.01で作成されたフォームタグを埋め込む際には、どのような点に注意すればよいですか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
メールの文字化けのことすかね。 mail()関数でメール送られていますので、 $subjectはこのままで結構ですが、 $messageはJISに変換する必要があります。 $message = mb_convert_encoding($message,'JIS', 'AUTO'); ←追加 mail($to,$subject,$message,"From:$from"); としてやるとうまくいきませんか? 化ける場合は、これも試してください。 mb_language("ja"); ini_set('mbstring.internal_encoding', 'UTF-8'); ←追加 --------------------------------------------------------- 他には mb_send_mail()を使う方法もあります。 この場合は、$subjectも$messageも無変換でOKですが、 mbstringの設定をしないと化けます。 (例) ページ先頭に <?php mb_language('Japanese'); ini_set('mbstring.detect_order', 'auto'); ini_set('mbstring.http_input' , 'auto'); ini_set('mbstring.http_output' , 'pass'); ini_set('mbstring.internal_encoding', 'UTF-8'); ini_set('mbstring.script_encoding' , 'UTF-8'); ini_set('mbstring.substitute_character', 'none'); mb_regex_encoding('UTF-8'); ?> ($subjectも$messageも変換しない) mail($to,$subject,$message,"From:$from"); ↓ mb_send_mail($to,$subject,$message,"From:$from"); 一度お試しください。
その他の回答 (1)
- GuitarOshou
- ベストアンサー率100% (7/7)
POSTされた内容が化けて表示される場合は、mbstring 関連に問題があるのではと思います。 PHPスクリプトファイルをUTF-8に直すこと前提でいけば、 下記のページの「UTF-8 で作成・保存して、 UTF-8 で表示させる場合」あたりが参考になるかと。
お礼
お世話になり、ありがとうございました。
補足
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" href="style.css" type="text/css"> <BASE target="_top"> </head> <body> <div align=center> <? /*送信ボタンが押されたとき */ if ($_POST{action} == "sendmail") { $ng = 0; /* 入力のチェック */ if (!$_POST{name}) { print("<BR>氏名が入力されていません。<BR>\n"); $ng++; } if (!$_POST{mail}) { print("<BR>メールアドレスが入力されていません。<BR>\n"); $ng++; } if (!$_POST{comment}) { print("<BR>お問い合わせ内容が入力されていません。<BR>\n"); $ng++; } if ($ng) { print ("<BR>お問い合わせに失敗しました。<BR>\n"); print ('<input type="button" value="前の画面に戻る" onClick="JavaScript:history.back(-1);">'); print ("</body></html>\n"); exit; } $currentdate = date("Y/m/d H:i"); $ordernum = date("Ymd"); $message = "ホームページからお問い合わせがありました。\n\n"; $message .= "■ 送信者は以下の通りです。\n"; $message .= "--------------------------------------------------\n"; $message .= "送信日時 :".$currentdate."\n"; $message .= "氏名:".$_POST{name}."\n"; $message .= "メールアドレス:".$_POST{mail}."\n"; $message .= "お問い合わせ内容:".$_POST{comment}."\n"; $message .= "--------------------------------------------------\n\n"; mb_language("ja"); $from = mb_convert_kana($_POST{mail},"KVrna"); $to = ""; $subject = "ホームページからお問い合わせがありました"; $subject = '=?ISO-2022-JP?B?' . base64_encode(mb_convert_encoding($subject, 'ISO-2022-JP', 'AUTO')) . '?='; $message = stripslashes($message); mail($to,$subject,$message,"From:$from"); print ("<BR><BR>\n"); print ("御要望を承りました。<BR>近日中にご返信させていただきます。<BR><BR>\n"); print ('<A HREF=""> >> トップページに戻る</A> <BR>'); print ("</body></html>\n"); exit; } ?> </div> </body> </html> 御回答、まことにありがとうございます。 また、御紹介して頂いたサイトは、私にとっては敷居が高いように思われます。 上記が「form.php」の中身なのですが、御指導をお願いできませんでしょうか? 宜しくお願い致します。 shift_jisで作成後、utf-8に変換した(つもり)ものです。
お礼
「$message = mb_convert_encoding($message,'JIS', 'AUTO');」を入力することで解決しました。 どうして、このようなことが閃くのですか? とにかくありがとうございました。 本当に助かりました。 今後もよろしくお願いします。