PHPでHTTPヘッダをUTF-8にする

いくつかのPHPページでは、以下のコードでHTMLページに様々なものをエコーアウトしています。

<meta http-equiv="Content-type" content="text/html; charset=utf-8" />

しかし、W3C validatorを使って検証すると、次のように出てきます。

HTTPヘッダで指定された文字エンコーディング(iso-8859-1)と、<meta>要素内の値(utf-8)が異なります。

私はPHPの経験が浅いのですが、PHPファイルのヘッダーをHTMLファイルに合わせて変更することができるのか、またそうすべきなのか疑問に思いました。

ソリューション

HTTPヘッダーを変更するには、headerを使用します。

header('Content-Type: text/html; charset=utf-8');

この関数は、クライアントに何か出力が送られる前に呼び出すことに注意してください。そうしないと、ヘッダも送信されてしまい、明らかにそれ以上は変更できません。これは headers_sentで確認できます。詳しくはheader`のマニュアルページを参照してください。

解説 (6)

まず、PHPファイル自体がUTF-8でエンコードされていることを確認してください。

metaタグはブラウザによっては無視されます。もしASCII文字しか使わないのであれば、どちらにしても問題ありません。

http://en.wikipedia.org/wiki/List_of_HTTP_header_fields

header('Content-Type: text/html; charset=utf-8');
解説 (0)

これは、ウェブサーバーが、あなたが定義したものと一致しないHTTPヘッダーを送信するという問題です。サーバーが正しいヘッダーを送信するようにする方法については、このページを参照してください。

また、PHPを使用してヘッダーを変更することもできますが、このコードを使用してテキストを出力する前に行う必要があります。

header('Content-Type: text/html; charset=utf-8');

PHPを使用してヘッダを送信する方法の詳細については、 header関数のドキュメントを参照してください。

解説 (0)