php備忘録: UTF-8で記述したページをIEで表示することができない

サイト作りのプロにとっては当たり前のことかも知れないが・・・。

買い物かごをUTF-8で書いたけれど、IEで見ようとすると何故か白紙!?
普段はmozilla系のブラウザを使っているので、こんなことになっているとは全く気づきませんでした。
ブラウザの文字エンコーディングを「UTF-8」に変更すると一応表示できるが、IEのバージョンによってはうまくいかない様子。
これじゃお客さんにとって迷惑この上ないが、とりあえず放置(ダメじゃん)していました。
さんざん悩んだけれど、ネットで調べると簡単に解決策が見つかりました♪
同じ事で困る方も多いようです。

最初のつまずきは<META>タグの位置

見た目でこっちがいいかなと思い、何気なく書いたコード。
これもまた、引っかかる元でした。

<TITLE>~</TITLE>等で文字出力をする前に
<META http-equiv=”Content-Type” content=”text/html; charset=UTF-8″ />
の記述をしないとうまく文字エンコーディングを識別してくれないブラウザがあるということを知った。

順番って大事なんですね。

HTTPヘッダーも!?

<META>タグで指定しているから大丈夫と思いきや、HTTPヘッダーの中に文字エンコーディングを指定しなといけないブラウザもどうやらあるらしい。
こちらはphpの先頭に
header(‘Content-Type: text/html; charset=UTF-8’);
と記述しておくと良い模様です。

ここで大事なことは「文字出力をする前に文字エンコーディングを知らせる」ということ。
改行にせよ、スペースにせよ、何かが送り出されてしまうとheader()は意味を持たないようです。

これで良いのかな?
<?php
header('Content-Type: text/html; charset=UTF-8');
?>
<HTML>
<HEAD>
  <META http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <TITLE>~~~</TITLE>
</HEAD>
<BODY>
~~~~~
~~~~~
</BODY>
</HTML>
カテゴリー: php パーマリンク