Как мне передать XHTML в Internet Explorer, не ломая Chrome?

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 и предлагает просто скачать файл.

На сайте w3c я читал, как обойти это, используя XSL-преобразование ( 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-с-сущностями в IE?

В случае, если это имеет значение, страницы генерируются скриптом php и обслуживаются через apache, поэтому, если есть надежный способ прослушивания браузера и изменения начала документа (то есть только отправки <?xml-stylesheet ...>бита в IE), тогда это будет приемлемая альтернатива.

(Я надеюсь, что у меня есть правильный сайт SE ... пожалуйста, дайте мне знать, если я не в том месте. То же самое с тегами.)

Эндрю Стейси
источник
Вопросы по чистому (X) HTML / CSS находятся на stackoverflow.com, но ваши не так просты, как вы упомянули возможное решение на стороне сервера, поэтому я не отмечу его для перемещения. Если вы не получили никакого ответа, я бы удалил его и вставил туда. Некоторые вопросы HTML, как правило, получают ответы в считанные секунды!
paulmorriss
@paulmoriss: Спасибо за (частичное!) разъяснение. Иногда в болоте SE сайтов я немного теряюсь ...
Эндрю Стейси
Перечитывая мой комментарий, я могу быть не совсем ясен. Я имею в виду «на вашем месте я бы удалил это ...». Тебе решать.
paulmorriss
@paulmoriss: Это является проблемой конфигурации на стороне сервера , так как речь идет о справиться с браузером , который не может справиться с XHTML и как послать им то , что они могут справиться. Просматривая список «связанных» вопросов, кажется, что есть много похожих идей. Но я не знаю, какова область этого сайта (и чем больше я читаю, тем больше я запутываюсь), и у меня не было никаких ответов, поэтому я последую вашему совету (через некоторое время).
Эндрю Стейси

Ответы:

1

[I] Если есть надежный способ прослушивания браузера и изменения начала документа (то есть только отправки бита в 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.')));
danlefree
источник