IE で見えるようにしました。 application/xhtml+xml に対応していない場合は、 text/html で返すように。本当はしたくなかったけれど。
application/xhtml+xml に対応しているかどうかは、次の条件式で。
preg_match( '/[,^]\s*application\/xhtml\+xml\s*([,;$])/', $_SERVER["HTTP_ACCEPT"] ) > 0
XHTML1.1 に正しい MIME Type を - Code-404 で掲載されている PHP のコードはちょっと正しくありません。 HTTP_ACCEPT の値がカンマの後にスペースが入っていたり application/xhtml+xml の後に ;q=0.9 のようなのが入っていたら判定ミスします。( Opera が前者で判定ミスされます )仕様書も見たわけじゃないので、上記の正規表現が完璧かは分かりません。
で、 application/xhtml+xml に対応していない IE に text/html で配信することは出来ました。 IE7 で確認して問題なし。
IE6 では謎のエラーが出ました。
CSS スタイル シートを使用した XML 入力は表示できません。エラーを訂正してください。 [更新] ボタンをクリックするか、または後でやり直してください。
使用する前にパラメータ エンティティを定義しなければなりません。リソース'http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd' の実行エラーです。ライン 100、位置 2
%xhtml-prefw-redecl.mod; -^
どうやら xml-stylesheet 命令あたりに原因がありそうなので、 application/xhtml+xml に対応していない IE には XML 宣言と xml-stylesheet 命令を出力しないようにしました。
最終的なコードは以下のような感じです。
if( preg_match( '/[,^]\s*application\/xhtml\+xml\s*([,;$])/', $_SERVER["HTTP_ACCEPT"] ) > 0 ) {
header( 'Content-Type: application/xhtml+xml; charset='. get_bloginfo('charset') );
echo '<?xml version="1.0" encoding="'. get_bloginfo('charset') . '" ?>'. "\n";
echo '<?xml-stylesheet href="'. get_bloginfo('stylesheet_url') . '" type="text/css" media="all" charset="UTF-8" ?>'. "\n";
} else {
header( 'Content-Type: text/html; charset='. get_bloginfo('charset') );
}