Chromeを壊さずにInternet ExplorerにXHTMLを提供するにはどうすればよいですか?


8

私はそのページをXHTML + MathML + SVGとして提供するフォーラムを運営しています。略さずに:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" "http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg-flat.dtd">

MathPlayerプラグインを使用すると、Internet Explorerユーザーはこのサイトを使用できます。ただし、誰かがIEのフォーラムを使用していて、MathPlayerをインストールできない場合があります(おそらく、どこかの公共のマシン上にあります)。次に、IE(少なくとも6と7)はXHTMLについて不平を言い、ファイルをダウンロードすることだけを提案します。

XSL変換を使用してこれを回避する方法をw3cサイトで読みました(http://www.w3.org/MarkUp/2004/xhtml-faq#ie)。これを配置したところ、Chromeが未定義のエンティティについて激しく不満を言っていることがわかりました(特定のものはそうでした&nbsp;が、テストはそれが関連していないことを示しています)。

奇妙なことに、DOCTYPEでエンティティを手動で宣言することで、これを回避できます。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" "http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg-flat.dtd" [
<!ENTITY nbsp "&#160;">
]>

しかし、私はエンティティの全範囲に対してこれを行うのではなく、XHTML + MathML + SVG dtdは、私の知る限りでは、これらのエンティティを宣言しているため、「奇妙に」と言います。したがって、どういうわけか、これらは見逃されています。

この問題を回避する方法はありますか?XHTML-with-entitiesをIEに提供できますか?

重要な場合、ページはphpスクリプトによって生成され、Apacheを介して提供されます。そのため、ブラウザーをスニッフィングしてドキュメントの先頭を変更する信頼できる方法がある場合(つまり、<?xml-stylesheet ...>ビットをIEに送信するだけ)、それは許容可能な代替。

(適切なSEサイトがあることを願っています...間違った場所にいる場合はお知らせください。タグと同じです。)


純粋な(X)HTML / CSSの質問はstackoverflow.comに属しますが、可能なサーバー側のソリューションについて言及しているように、あなたの質問はそれほど単純ではないため、移動のフラグを立てていません。ここで答えが得られない場合は、削除して、そこに配置します。いくつかのHTMLの質問は数秒で答えられる傾向があります!
paulmorriss、2011

@paulmoriss:(部分的に!)明確化していただきありがとうございます。SEサイトの泥沼で時々私は少し迷子になります...
Andrew Stacey

私のコメントをもう一度読んで、私はあまり明確ではないかもしれません。「私があなただったら、それを削除します...」という意味です。それはあなた次第です。
paulmorriss、2011

@paulmoriss:それはある、それは彼らが対処できることを彼らに何かを送信するためにXHTMLとどのように扱うことができないブラウザへの対応についてですので、サーバー側の設定の問題。「関連する」質問のリストをスキャンすると、アイデアが似ているものがたくさんあるようです。しかし、私はこのサイトの範囲が何であるかを知りません(そして、私が読むほど、私は混乱します)、私は答えがありませんでしたので、あなたのアドバイスに従います(しばらくの間)。
Andrew Stacey、2011

回答:


1

[I] fブラウザをスニッフィングしてドキュメントの先頭を変更する(つまり、ビットをIEに送信するだけの)信頼できる方法がある場合、それは許容できる代替策です。

このPHPステートメントは、ユーザーエージェント文字列に「MSIE」を含むすべてのブラウザーに一致します。必要に応じて、バージョン番号を追加することで基準を調整できます。

$flag_is_ie = (false !== strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE'));

...バージョン番号付き:

$flag_is_ie = (false !== strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.'));
$flag_is_ie = ( $flag_is_ie || (false !== strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 7.')));
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.