• 締切済み

PHP 問い合わせフォームの文字化け

はじめまして。 会員648です。 Websiteを作成し、問い合わせフォームで 入力をHTML、チェック・確認画面、送信をPHPで 作成しました。 初心者なので、サイトでの作成事例をまねております。また文字化けは UTF-8を書けば良い ということも サイトにあったので、とりあえずそうしました。 しかし 他のHTMLは正常に表示しますが、HTMLの入力画面、PHPチェック画面 すべて  文字化けします。 入力画面は <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <form method="post" action="check.php"> ですが 文字化け表示となります。 内容確認画面は check.php で <?php // フォームデータが空の場合は処理終了 if (empty($_POST)) { echo "処理終了"; exit; } // セッションの開始 session_start(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> で始まります。 詳しくPHPを知りませんので、どこが問題なのか 教えていただけませんでしょうか。 なお、テスト環境は 自分のPCで Xampp をインストールして、htdocs 配下に すべての HTML, CSS, image,php を 置いております。 なにとぞ よろしくお願いいたします。

みんなの回答

noname#244856
noname#244856
回答No.2

>> ソースコードはWin7添付のメモ帳にすべて書いております Windowsのメモ帳はこの道の人なら「絶対に使ってはいけない」と断言するぐらいの粗悪品です。 かろうじてUTF-8エンコーディングには対応していますが、改行コードLFには対応していません。 先ほど申し上げたNotepad++ならWindows系の「CRLF」、MAC系の「CR」、UNIX系の「LF」全てに対応できます。 >> 改行コードをCRLF からLFに変更というのはやり方が分かりません Notepad++の例で説明します。 「編集」→「改行コードを変更」→「UNIXフォーマットに変換」で出来ます。 「フォーマット」→「UTF-8(BOM無し)に変換」とは別の場所にあるので少し気づきにくいかも。 >> 普通にHTMLでメモ帳に記述した部分は動作しているのですが、これもすべてUTF-8で書き戻した方が良いのでしょうか。 そうですね。エンコーディングが混在しているのは非常に気持ち悪いので、UTF-8に統一すべきだと思います。 Notepad++でも変換できますが、複数ファイルを一括変換したいのであればKanjiTranslatorの方が便利ですね。 http://www.kashim.com/kanjitranslator/ ちなみにUTF-8にすることでいろいろメリットはあります。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13113188793 >> .phpのファイルをANSIからUTF-8保存し直してapplication/xhtml+xmlに置き換えてみましたが変化がありません ブラウザでエンコードはどのように認識されていますか? Content-Typeが正しく伝わっていればUnicode(UTF-8)が選択されているはずです。 header関数を使う場合は「自動選択」のチェックの有無に左右されないと思います(多分)。 GoogleChromeの場合は「ツール」→「エンコード」で確認できます。

kaiin648
質問者

お礼

いろいろありがとうございます。  IE10.0を使用しておりますが ブラウザでの認識が UTF-8かどうかは どこで 確認できるのでしょうか。 WINDOWSのメモ帳が 粗悪品というのは 初めて知りました。 作った全部の HTML PHPをNotepad++に 移行 したほうが良いのでしょうね。KanjiTranslator で 一括でやってみます。 また 結果をお知らせいたします。 ありがとうございます。

noname#244856
noname#244856
回答No.1

>> また文字化けはUTF-8を書けば良い ファイル自体のエンコーディングはUTF-8で書いていますか? 意味も分からずにとりあえず指定すればいいと思っていませんか? 個人的にはShift_JISで書いていそうな気がします・・・ こちらのエディタを使えばファイルを編集しながらエンコーディングを変更したりすることも可能で便利なのでぜひお使いください。HTML・CSS・PHP・JavaScriptのシンタクッスハイライトに対応しています。 http://notepad-plus-plus.org/ デフォルトではエンコーディングANSI(Shift_JIS、正確にはCP932のこと)、改行コードはWindowsフォーマット(CRLFのこと)になっていると思うので、UTF-8N(BOM無しUTF-8のこと)、改行コードはUNIXフォーマット(LFのこと)に変更してください。 以下数点自分なりのおすすめ。 1. PHPを使用したXHTMLならばheader関数でContent-Typeをブラウザに知らせたほうがいいと思います。 XHTML1.0ではmetaタグでContent-Typeを書くことが許されていますが、XHTML1.1では禁止されています。 また、header関数で知らせる場合は「XHTML」なので「text/html」ではなく「application/xhtml+xml」にします。 この場合はXML宣言も必要です。 2. // フォームデータが空の場合は処理終了 if (empty($_POST)) { echo "処理終了"; exit; } は少々ぶっきらぼうすぎる気がするので、とりあえずXHTMLは出すようにして、その中にエラーメッセージを配置するようにした方が親切でしょうね。 以下のような関数を使えば変数構造・UTF-8エンコーディングに関するフィルタリングが出来ます。 http://qiita.com/mpyw/items/c39b9ee695a5c2e74627 XHTML1.1での実装例 http://bloggdgd.blog28.fc2.com/blog-entry-287.html

kaiin648
質問者

お礼

早速ありがとうございます。 おっしゃるように 意味も分からず UTF-8と指定しています。 ソースコードは Win7 添付の メモ帳にすべて書いております。これのコードは ANSIとなっていました。 .phpのファイルを ANSIからUTF-8で保存し直して application/xhtml+xml に置き換えてみましたが 変化がありません。 改行コードを CRLF から LFに変更というのは やり方が分かりません。本当にこの道の初心者なので。 それから 普通にHTMLでメモ帳に記述した部分は動作しているのですが、これも すべて UTF-8 で書き戻した方が 良いのでしょうか。 ご指導お願いいたします。

関連するQ&A