Deprecated: Function ereg() is deprecated in /virtual/bsakatu/module/xml_declaration.inc on line 4
メモ帳日記 : SSIでXML宣言
  1. メモ帳日記 >
  2. Web >
  3. HTML / CSS >
  4. SSIXML宣言

メモ帳日記

日記書いたりメモ書いたり

2006年 8月 28日(大安

SSIXML宣言

このサイトではInternet Explorer(7にはない)のふざけたバグ(XML宣言がファイル先頭にあると標準モードではなく互換モードになる)を回避するために,XHTMLを用いていながらXML宣言をしていませんでした。ですが,その他のブラウザはこんなことにはならないのでどうにかXML宣言をさせようとしてみました。現状,このサイトではSSIを用いて共通の部品をIncludeさせています。なのでXML宣言についてもSSIで行ってみたいと思って調べてみると,ちゃんと方法が見つかりました。詳細は以下のとおり。

.htaccessにてUser Agentの判定。Internet Explorer(7以前)のみXML_Declarationを偽とする。

BrowserMatch .* XML_Declaration
BrowserMatch "MSIE [^7]" !XML_Declaration

ファイル先頭に判定分の挿入。XML_Declarationが真ならXML宣言が書かれたファイルをIncludeする。

<!--#if expr="${XML_Declaration}" -->
<!--#include virtual="/hogehoge.html" -->
<!--#endif -->

これでできるはず,と思っていたらなぜかFirefoxでファイル先頭に空行が1行だけはいるという現象が発生。いろいろ調べるもさっぱりわからず。しかし,問題が真っ先に起こりそうなInternet Explorerではどうもなっていない。さらに調べると,Operaでもなっていた。まさかと思ってProxomitronをバイパスモードにして,Internet Explorerでもう一度見てみると,空行が……。ローカルではこんなことはないので,どうもXREAが怪しいと思って調べると,あった。どうも自動広告挿入が原因だそうだ。これ,このサイトでは<!--nobanner-->と書いて手動広告挿入しているから完全に無効になっていると思ったら,これだけでは完全には無効にならないとかで,上記の現象が発生していたようだ。これを直すには.htaccessにLayoutIgnoreURI *と書けばいいみたいだ。

このサイトを作った当初はこの記述をいれて<!--nobanner-->はいれないでいこうと思った時期もあったが,この記述は今後廃止される可能性があるらしいので,結局使わないことにしていた。しかし,現状この記述をしないとどうしようもないので,今はとりあえずこれでいく。XREAが自動広告挿入のプログラムを改善してくれれば大丈夫なんだが。さて,今後どうなるやら。

今回も悩み損な気がしないでもない……。