文字コードは、UTF-8
XHTML+CSSでサイトを構築する機会が増えてきていると思いますが、少し困るのが、XML宣言の記述。XHTML+CSSでサイトを構築する勉強をすると、よく目にすると思うのですが、
IE6は、XML宣言に限らずコメントをはじめとする何らかのテキストがDOCTYPE宣言の前にあると、強制的にブラウザの表示モードが「互換モード」になる。
というのが、あります。この表示モードの「互換モード」というのは、ブラウザ独自の解釈でサイトを表示するので、自分の思ったとおりにサイトが表示されない可能性があります。なので表示モードは、「標準モード」の方が望ましいので、XML宣言を記述しないようにすることが、一般的になりました。
これは、IE6が世界で最も使用されているブラウザだったからです。しかし、まだ問題があります。
それは、XHTML文章では、その先頭にXML宣言を配置することが推奨されているというものです。つまりXHTML+CSSでサイトを構築するならXML宣言は、記述しなければならないということです。しかし、XML宣言を記述すれば、IE6は、「互換モード」になり表示が変わる。
なんか、もうややこしいですよね。
でも、これにも解決策は、ちゃんとあるんです。
それは、サイトを公開するサーバーが文字コードを送信する仕組みであれば、XML宣言は、必要ではなくなります。ただ、サーバー側が文字コードを送信しているか分からないという場合があります。(実際サーバーについて僕は詳しくないので分かりませんでした。勉強不足なだけかもしれませんが…)これでは、確実性に欠けます。
では、確実な方法は、ないのかと思うのですが、ちゃんとあるんですね確実な方法が。いたって簡単な方法で、文字コードをUTF-8にするだけです。
簡単に理由を説明すると文字コードをUTF-8にしてXHTMLを記述した上でXML宣言を省略するなら、 文法的に問題がないからだそうです。これなら確実にできるし、XML宣言を記述しないのでIE6でも、「標準モード」でサイトを構築できます。
HTMLファイルの文字コードをUTF-8にするには、以下のように記述します。
<!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" xml:lang="ja" lang="ja" dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title></title>
</head>
<body>
</body>
</html>
CSSにも、冒頭に@charset "UTF-8";と記述すると良いみたいです。
これで、XML宣言を省略できます。
今日の情報は役に立った!と思われましたら下のバナーから応援よろしくお願いします。1クリックしていただけるだけで嬉しいです。
- 投稿者:トモちゃんヌ
- 日時:20:43
comments
XML宣言について、理解をほとんどあやふやにしていたので
勉強する良い機会になりました。
実は、今までXML宣言をしていませんでした(汗)
で、試しにXML宣言を入れてみると見事に表示が崩れました^^;
IE6にこんなバグというか標準とか互換があるのを初めて知りましたよ!
http://www.dspt.net/html_tag/mode.html
↑こちらに分かりやすく表にして書かれてました。
文字コードをUTF-8にするとXML宣言しなくて良いってのは
大変有益な情報ですね。メモメモ
でも、PHPを使う時、基本的にEUC-JPを使うことが多いのですが、
そうなると、またもや困ったことに。。
>ツーツーイさん
こんにはです。ツーツーイさん
>勉強する良い機会になりました。
お役にたてる情報を公開できて僕もよかったと思います。
>実は、今までXML宣言をしていませんでした(汗)
IE6のバグでXML宣言は、記述しないことが、一般的になっていたので、していない方が多いですよ。僕も最近まで、してませんでしたしね。
>IE6にこんなバグというか標準とか互換があるのを初めて知りましたよ!
「標準モード」と「互換モード」は、Firefoxとか、最近のブラウザは、搭載されているみたいですね。IE6は、バグです。本来は、「標準モード」にならないといけないのですから。
>PHPを使う時、基本的にEUC-JPを使うことが多いのですが、
>そうなると、またもや困ったことに。。
PHPの分野は、勉強していないので、間違っているかも知れませんが、対策としては、EUC-JPをUTF-8にするか、XML宣言を入れて「互換モード」になっても、問題のないサイトを組むことで問題を解決できるかもしれませんね。
ただ、おそらくEUC-JPをUTF-8にするというのは、簡単なことでは、ないのでしょうね。
しかし「互換モード」になっても問題のなく表示されるサイトは、良いサンプルをツーツーイさんもお持ちです。それは、MTのテンプレートプログラムです。
MTから生成されるHTMLファイルは、XML宣言が全てのページに記述されていますが、IE6でもFirefoxでも問題なく表示できるサイトの組み方がされています。ですので、MTのサイトの組み方を勉強するのも解決の一つになるかも知れませんよ。