IE6でのXML宣言の問題と回避方法

Internet Explorer6は、XHTMLの <!DOCTYPE...宣言よりも前に文字やスペースがあると、古いブラウザ用の表示モード(互換モード)になってしまいます。

この問題を実感してもらうためにXHTMLを書いてみました。IEでの表示と、FirefoxOperaなどでの表示を見比べてみてください。

表示サンプル:XML宣言の問題を視覚でとらえる

この不具合は、サイトの表示が崩れる大きな原因にもなります。IE 6で互換モードになってしまうと、CSSで指定したwidthプロパティやheightプロパティの解釈が変わってしまうのです。この問題を避けるため、XML宣言をしないサイトも多いようです。

IE6以外でのみXML宣言をするPHPコード

そこで以下のコードを、テーマファイルに書き込みましょう。header.phpの一番最初にペーストすればOKです。<?php と ?>の前後に、余計なスペース・改行などは入れないでくださいね。

<?php
$ua = $_SERVER['HTTP_USER_AGENT'];

if (!(ereg("Windows",$ua) && ereg("MSIE",$ua)) || ereg("MSIE 7",$ua)) {
     echo '<?xml version="1.0" encoding="' . get_settings('blog_charset') .'"?>' . "\n";
}
?>

コードの簡単な説明

上記のコードは、訪問者のブラウザがWindowsのIE以外だった場合に、XML宣言をするようになっています。ただし、XML宣言の不具合はInternet Explorer7.0bでは直っているそうなので、その場合の処理も書きました。

関連記事:
少しきびしいHTML構文チェック

TrackBack URIhttp://bd.dotted.jp/archives/84/trackback/

7 Trackbacks & Pingbacks

  1. no.1 煤式自動連結器 Says:
  2. WordPress→IE6でXML宣言...

    結局、Another HTML-lint gatewayが気になって仕方がないので、まずxhtml 1.0 Transitionalからxhtml 1.0 Strict (more...)

  3. no.2 TA.WA.GO.TO. Says:
  4. ウェブ標準ってか!?...

    Movable Type でブログを運営していた時に本当にお世話になった「小粋空間」ですが、最近は Movable Type に留まらず、WordPress に関しても (more...)

  5. no.3 NetSphere Says:
  6. スタイルシートにおけるIE6の不具合...

    今までずーっとIE6を使っていて、そんなもんだと思って気にも留めなかったんですが、IE7とOpera、Firefoxを使うようになって、スタイルシートの不具合が目に付く (more...)

  7. no.4 Cha's Bar Says:
  8. 覚書:XML 宣言の仕方...

    ウェブ標準に拘って、いろいろと XHTML や CSS をいじっているのですが、いつまでたっても <!DOCTYPE…宣言で減点が大きかった・・・試行 (more...)

  9. no.5 Cha's Bar 2.0 Says:
  10. XHTML における「XML 宣言」の方法...

    XHTML 1.0 では、XML 宣言することが強く求められる!という事は良く知られているようですが、Internet Explorer 6.0 (IE6.0) が、そ (more...)

  11. no.6 yoseyama Blog Says:
  12. XML宣言...

    を!するとIE6以下ですごいことになります…><
    IE6でのXML宣言の問題と回避方法
    ... (more...)

  13. no.7 福岡の社会保険労務士(社労士いなだ)ブログ Says:
  14. WordPressでXML宣言をする方法(IE6以外)...

    WordPressネタです。興味がない場合は、飛ばしてください。

    WordPressで普通にXML宣言をするとエラーが出てしまいます。

    画面が真っ白になって、 (more...)

10 Comments

  1. no.1 M's Says:
  2. この問題は、ME2.0.2で使用している場合、
    オプション→フォーマットオプション→不正な XHTML 構文を自動的に修正する のチェックを入れておけば、特にテーマファイルに宣言する必要はないのでしょうか?いまいち説明が理解できていません。

  3. no.2 Kaira Says:
  4. “不正なXHTML構文を自動的に修正する”というオプションは、記事内の構文をチェックするだけです。なのでIE6+XML宣言の問題とは別になります。

    この問題を実感してもらうためにXHTMLを書いてみました。IEでの表示と、FirefoxOperaなどでの表示を見比べてみてください。

    表示サンプル

  5. no.3 M's Says:
  6. なるほど、FirefoxとOperaで比較して実感できました。

  7. no.4 M's Says:
  8. あれ?2行目以降がはじかれてしまいました。 :?: (再投稿します)

  9. no.5 M's Says:
  10. <!DOCTYPE...宣言よりも前に文字やスペースがあると、

    ということなので、

  11. no.6 M's Says:
  12. すみません、何故か1行しか表示されません… 8O

  13. no.7 Kaira Says:
  14. あらら 8O
    私の環境では平気なんですが……どうしちゃったんでしょ。

    XHTMLを書くときにはxml宣言をするよう、XHTMLの仕様書で強く推奨されています。それなのにIEに不具合があるんです。

    XML宣言をしなければ問題は回避できます。でも仕様書に背くのも、あまり気持ちのよいものではありません。XML宣言をしてもpaddingやborderをゼロにすれば、IEでもレイアウトは崩れません。しかし、それも面倒です。

    そうなると仕様書どおりに書いて、なおかつIEでXML宣言をしない方法が必要になります。

    そこでPHPを使って、IE6以前でのみXML宣言をするようにしたわけです。

  15. no.8 Says:
  16. 上記のPHPを使わせていただき、ついにXML宣言することができました。 :mrgreen:
    ありがとうございました。

  17. no.9 AU Says:
  18. はじめまして、
    わたくしワードプレスを始めたばかりのものですが、
    一つ質問をさせていただいてもよろしいでしょうか。

    IEのボックスモデルバグやfloatのバグは対処できますので
    できればすべてのブラウザに対してXML宣言をしたいのですが、
    header.phpなどにXML宣言をそのまま記入すると
    ソースに何も表示されなくなってしまいます。
    (PHPファイルでは「?」に囲まれた文はまずいのかな?)

    もしよろしければ、
    普通にXML宣言をするPHPコードを教えていただけませんでしょうか。

    何卒、宜しくお願い致します。

  19. no.10 AU Says:
  20. すみません^^;

    お返事をいただく前になんとか自分で記入のしかたがわかりました。

    コメント欄での質問、
    まことに失礼いたしました^^

Leave a Reply