解決済みの質問
私はフォームにデータを入力するファイル(enter.html)、それをチェックするファイル(check.php)及びデータをメールで送信するファイル(mail.php)を分離しています。
これらのファイルの内、ブラウザーにファイル内のHTMLコードが出力されるのは、データを入力するファイル(enter.html)だけです。
入力されたデータをチェックするファイル(check.php)及びデータをメールで送信するファイル(mail.php)は、phpのechoを使用して、入力エラーがあったり、メールが送信された場合にその旨のメッセージをブラウザーに表示しますが、HTMLは含みません。
そのため、データを入力するファイル(enter.html)には、<meta http-equiv="Content-Type" content="text/html; charset=utf-8">とエンコード形式(UTF-8)をHTMLヘッダー内に記述しているのですが、htmlを含まないphpファイル(check.php及びenter.html)にも<meta http-equiv="Content-Type" content="text/html; charset=utf-8">などのようにHTMLヘッダー内にエンコード形式を記述する必要はあるのでしょうか?
よろしくお願いします。
キャサリン
投稿日時 - 2007-09-16 15:48:27
結論から言うと、書く必要があります。
PHPがレスポンスを返す場合、何も指定がなければ、
PHPが自動的にhttpヘッダー(HTMLのヘッダー部やmetaタグではない)に
"Content-Type:text/html"を付加して送信します。
ブラウザ側はそのhttpヘッダー情報を読み、html文書であると解釈して
echoやprintで出力された文字列を表示します。
metaタグもなくHTMLの書式でもない文字列がまともに表示されるのは
ブラウザがHTML文書だと解釈して足りない部分を補完してくれる機能があるからです。
文字コードについても同様に(単なる文字列にはエンコード指定がないため)
ブラウザが独自に判断して「たぶんこれ」と思う文字コードで解釈します。
httpヘッダーについては自動で付加("Content-Type:text/html"の場合)されるので
意識する必要はありませんが、ユーザー側のブラウザにHTML補完機能や
エンコード自動解析の機能が必ず備わっていると期待するべきではありません。
WEB標準(が確立されているかどうか微妙ですが)に準拠したHTML文書を送信するのが無難でしょう。
function html_message( $msg = "" )
{
print <<<HERE
<!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" />
<title>Message</title>
</head>
<body>
$msg
</body>
</html>
HERE;
}
私の場合上記のような関数をつかう等しています。
参考URL:http://php.planetmirror.com/manual/ja/function.header.php
投稿日時 - 2007-09-16 20:56:00
お礼
utano_mさん
ご回答ありがとうございました。
良く理解できました。
キャサリン
投稿日時 - 2007-09-17 13:33:07
0人が「このQ&Aが役に立った」と投票しています
OKWaveのオススメ
おすすめリンク