【PR】 キッチン・ホーム用品もAmazon.co.jp
【PR】 英語・韓国語学習に役立つリンク集
【PR】 シャーロックホームズで楽々英語
【PR】 話題の足裏健康法「樹液シート」
 

・メタタグによる文字コード指定の有効性

一部の大手の検索エンジンなどを除いて、ほとんどのサイトでメタタグによる文字コードの指定を行っていると思います。実際、文字化けするページに遭遇するとソースを表示してメタタグを見てみますが、大半のページでメタタグによる文字コード指定を行っていません。

このようにメタタグによる文字コードの指定は明らかに効果がありますが、間違って使われている場合も散見されます。代表的な間違いは、

  • <meta http-equiv="Content-Type" content="text/html; charset=x-sjis">
  • <meta http-equiv="Content-Type" content="text/html; charset=x-euc-jp">
  • <meta http-equiv="Content-Type" content="text/html; charset=Shift-JIS">
  • 日本語のタイトルタグがメタタグの前に表示されている
があります。一つひとつ見ていきましょう。

1.メタタグについて解説した、古いホームページなどは確かにこの書き方を推奨されているケースもありますが、これはcharset=Shift_JISという書き方では、Mozilla2.0(古いバージョンのネットスケープ)などが解釈できないために文字化けを起こすためであるのですが、こんな古いバージョンのネットスケープユーザーは1000人に一人もいません。元々x-sjisは公式的なものではなく、インターネット初期において、バグっているブラウザに合わせて普及した書き方であり、現在では、この書き方は百害あって一利なしです。

2.「1」と全く同じ理由で、「x-euc-jp」も使わない方が良いです。

3.「Shift-JIS」ではなく、「Shift_JIS」です。ハイフンはEUC-JPの場合であり、Shift_JISはアンダーバーを使います。

4.これについては確固たる根拠があるわけではないのですが、例えば、
<title>文字化けについて</title>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP>
とある場合に、「文字化けについて」の文字コードの解釈をブラウザはどのようにすれば良いことになるのでしょうか? 「メタタグがタイトルタグの上に来てはならない」という規則があるのかなというぐらいに、メタタグの上にタイトルタグを記述する人が多いのですが、これは普及しているホームページ作成ソフトの癖なのでしょうか? 私の場合、ネットスケープ4.Xでメタタグの上にタイトルタグを書いていたところ文字化けしていて、入れ替えたら文字化けが解消したことがあってから、必ずメタタグをタイトルタグの上に書くようにしています(たまたまだった?)。また、同じメタタグでもkeywordsやdescriptionの中に日本語を使っている場合は、その上にメタタグによる文字コード指定があった方が良いでしょう。

最後の「4」でも書きましたが、メタタグによる文字コードの指定はできるだけ上の方でやった方がよい訳です。もっと言うならHTMLファイルの中で記述しているのでは遅すぎるとも言えます。純然たるHTMLファイルの場合は、どうしようもありませんが、もしperlやPHPを利用されているのならば、是非、自力で文字コードをHTTPヘッダーで指定するべきです。

(サンプル)
● perlの場合
print "Content-type: text/html;charset=EUC-JP\n\n";
print "<html><head>\n";
print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=EUC-JP\">";
print "<title>サンプル</title>\n";
print "</head>\n";
print "<body bgcolor=\"#FFFFFF\">";
(中略)
print "</body></html>";


● PHPの場合
header("Content-Type: text/html;charset=EUC-JP");
print "<html><head>\n";
print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=EUC-JP\">";
print "<title>サンプル</title>\n";
print "</head>\n";
print "<body bgcolor=\"#FFFFFF\">";
(中略)
print "</body></html>";


上記がサンプルコードになります。また、少し話が逸れますが、このようにメタタグで記述するよりHTTPヘッダーで記述した方が良い事例は、文字コードだけではありません。キャッシュ制御のメタタグなどは特にそうです。

(参照)▼[HOWTO] Internet Explorer でキャッシュを無効にする
http://support.microsoft.com/default.aspx?scid=kb;ja;JP234067
マイクロソフトのサポート情報です。メタタグよりHTTPヘッダーでの記述を推奨しています。

話を元に戻しますと、文字化け対策としては、メタタグやHTTPヘッダーによる指定のほかに、.htaccessを使った指定方法もあります。

  AddType "text/html; charset=EUC-JP" html

これにより、その.htaccessが影響するディレクトリー内に入っているHTMLファイルは全てEUC-JPですという命令がブラウザに送信されます。この方法はネットスケープ4.Xの文字化けで有効である場合があります。具体例は別の章で説明します。

ただし、この.htaccessを置いているのに、HTMLファイル内で<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS>などと書けば文字化けする可能性大です。ご注意ください。同様に、.htaccessを置いていない場合でも、本当はUTF-8で作成しているのに、メタタグでShift_JISと指定した場合などは当然、化けます。そんな馬鹿なことはしないと多くの人は思うでしょうが、実際にはこの手の失敗は数多く見られます。メタタグの指定ミスがどのような重大事件を起こすかは、「Googleの検索結果サマリーの文字化け」の章をご参照ください。

次のページでは、メタタグではなく「美乳」という文字をヘッダー内で記述すると文字化けが起こりにくいという「神話」の信憑性について検証します。