PHP でいろいろ遊んでみた

この間から、このサイトの Content-Type を変えるために PHP でいろいろやっていました。まあ、所詮、自己満足の域を出ないのですが。

以前から XHTML を正しく扱える Web ブラウザには application/xhtml+xml で送っていたのですが、今回はもうちょっと進んで XML 宣言の有無とか、スタイルシートの処理命令とか、そんなのを対応しているブラウザごとに書き換えるようにしてみました。

具体的にどんなことをしていたかというと、Gecko エンジンを使った XHTML を正しく解釈するブラウザ などには application/xhtml+xml で送り出し、今まで link 要素で行なっていた CSS の指定も、 XML らしく xml-stylesheet 処理命令で行なうように書き換えてみました。 Web 標準に一番近いのって、やっぱり Gecko 系かもしれません。Firefox などは、それ自体が XML を応用した技術で作られているだけあって、さすが XML には強いですね。

Opera も XHTML を正しく解釈するブラウザ なので application/xhtml+xml で送り出しているのですが、 CSS の指定にはスタイルシート切り替えスクリプトの絡みで、xml-stylesheet 処理命令ではなく今までどおりの link 要素で指定しています。このブラウザ、なんだか異様に完成度が高いのですが、今一歩というところでおかしな仕様になっていて、とっても悔しいです。

Windows でも使える Safari 3 のベータ版を試してみたのですが、このブラウザは曲者ですね。一応、application/xhtml+xml で送り出せる XHTML を正しく解釈するブラウザ なのですが、XHTML として認識されるとスクリプトが効きません。

link 要素で CSS を指定しても代替スタイルシートが使えず、xml-stylesheet 処理命令を使えば alternate 擬似属性が無視され、すべて上書きされてしまいます。結局、将来的に Safari でも代替スタイルシートが使える日が来ることを期待して、割と問題の少ないであろう link 要素に入れておきました。これが Mac の世界では標準のブラウザなのですか? うーん、うーん……。

未だに大きな市場占有率 (シェア) を誇る IE への対策。 IE のように XHTML を正しく解釈しないブラウザ には text/html で送るのはもちろんのこと、 IE6 でいろいろと問題視されていた XML 宣言をつけないようにしてみたり。というのも text/html で送り出しているということは XML として解釈していないのと一緒なわけで、それだったらスタイルシートも xml-stylesheet で指定しても意味がないわけで、思い切って XML 宣言と xml-stylesheet 処理命令を削除して、1 行目でいきなり文書型宣言をするようにしてみました。

ぶっちゃけ、こうなるともう XHTML (かた) った、ただのインチキ HTML です。 XML 的な要素はまったくなく、見た目だけ XHTML です。もし IE が無料で配布されず、 XHTML 対応の Web ブラウザ として店頭に販売されていたなら詐欺で逮捕されてもおかしくありません。 HTMLXML には対応しているのに XHTML として application/xhtml+xml が読めないのは、他の新しいブラウザが多く対応しているだけに残念です。

というわけで、結局何が変わったかというと、それぞれのブラウザで見たときにページのソースを開いてもらえばわかると思います。要は XHTML を正しく解釈するブラウザ には XHTML としてビシッと厳格な記述を、 XHTML を正しく解釈しないブラウザ には XHTML もどきの、そこそこ見られるテキトーな記述をしていますよ、ということです。

あ、一番理想的なソースを吐き出しているのは言うまでもなく Gecko 系のブラウザで見た場合です。そんな意味でも、ひろやさんは Firefox の利用をお勧めします。