みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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 を 置いております。

なにとぞ よろしくお願いいたします。

投稿日時 - 2013-09-15 12:15:40

QNo.8264830

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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の場合は「ツール」→「エンコード」で確認できます。

投稿日時 - 2013-09-15 16:35:09

お礼

いろいろありがとうございます。

 IE10.0を使用しておりますが
ブラウザでの認識が UTF-8かどうかは どこで
確認できるのでしょうか。

WINDOWSのメモ帳が 粗悪品というのは 初めて知りました。
作った全部の HTML PHPをNotepad++に 移行
したほうが良いのでしょうね。KanjiTranslator で
一括でやってみます。

また 結果をお知らせいたします。
ありがとうございます。

投稿日時 - 2013-09-15 17:24:17

ANo.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

投稿日時 - 2013-09-15 14:47:23

お礼

早速ありがとうございます。
おっしゃるように 意味も分からず UTF-8と指定しています。
ソースコードは Win7 添付の メモ帳にすべて書いております。これのコードは ANSIとなっていました。

.phpのファイルを ANSIからUTF-8で保存し直して
application/xhtml+xml に置き換えてみましたが
変化がありません。
改行コードを CRLF から LFに変更というのは やり方が分かりません。本当にこの道の初心者なので。

それから 普通にHTMLでメモ帳に記述した部分は動作しているのですが、これも すべて UTF-8 で書き戻した方が
良いのでしょうか。

ご指導お願いいたします。

投稿日時 - 2013-09-15 15:43:14

あなたにオススメの質問