Comment puis-je servir XHTML à Internet Explorer sans casser Chrome?

8

Je gère un forum qui sert ses pages en XHTML + MathML + SVG; en entier:

<!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">

En utilisant le plugin MathPlayer, les utilisateurs d'Internet Explorer peuvent utiliser ce site. Cependant, parfois, quelqu'un utilise le forum d'IE et n'est pas en mesure d'installer MathPlayer (peut-être se trouve-t-il sur une machine publique quelque part). Ensuite, IE (au moins 6 et 7) se plaint du XHTML et propose simplement de télécharger le fichier.

J'ai lu sur le site w3c comment contourner cela en utilisant une transformation XSL ( http://www.w3.org/MarkUp/2004/xhtml-faq#ie ). Lorsque j'ai mis cela en place, j'ai trouvé que Chrome se plaignait maintenant vociférément d'entités non définies (la spécifique était, &nbsp;mais les tests montrent que ce n'est pas pertinent).

Bizarrement, je peux contourner cela en déclarant manuellement les entités dans le 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;">
]>

mais je préfère ne pas le faire pour toute la gamme d'entités possible. Je dis "bizarrement" parce que le dtd XHTML + MathML + SVG déclare, autant que je sache, ces entités. Donc, d'une manière ou d'une autre, ces éléments sont oubliés.

Existe-t-il un moyen de contourner ce problème? Puis-je servir XHTML-avec-entités à IE?

Dans le cas où cela importe, les pages sont générées par un script php et sont servies via apache, donc s'il existe une méthode fiable pour renifler le navigateur et modifier le début du document (donc n'envoyer que le <?xml-stylesheet ...>bit à IE), alors ce serait un alternative acceptable.

(J'espère avoir le bon site SE ... s'il vous plaît laissez-moi savoir si je suis au mauvais endroit. Idem avec les balises.)

Andrew Stacey
la source
Les questions Pure (X) HTML / CSS appartiennent à stackoverflow.com, mais la vôtre n'est pas aussi simple, car vous mentionnez une solution côté serveur possible, donc je ne la signale pas pour le déplacement. Si vous n'obtenez aucune réponse ici, je la supprimerais et la mettrais là-bas. Certaines questions HTML ont tendance à obtenir une réponse en quelques secondes!
paulmorriss
@paulmoriss: Merci pour la clarification (partielle!). Parfois, dans le marécage des sites SE, je me perds un peu ...
Andrew Stacey
En relisant mon commentaire, je ne suis peut-être pas très clair. Je veux dire "si j'étais vous, je le supprimerais ...". C'est à vous.
paulmorriss
@paulmoriss: Il s'agit d' un problème de configuration côté serveur car il s'agit de faire face à un navigateur qui ne peut pas gérer XHTML et de leur envoyer quelque chose qu'ils peuvent gérer. En parcourant la liste des questions «connexes», il semble que beaucoup d'idées soient similaires. Mais je ne sais pas quelle est la portée de ce site (et plus je lis, plus je suis confus) et je n'ai pas eu de réponse, alors je suivrai vos conseils (dans un petit moment).
Andrew Stacey

Réponses:

1

[I] S'il existe une méthode fiable pour flairer le navigateur et modifier le début du document (donc n'envoyer que le bit vers IE), ce serait une alternative acceptable.

Cette instruction PHP correspondra à tous les navigateurs qui incluent "MSIE" dans la chaîne de l'agent utilisateur et vous pouvez affiner les critères en ajoutant un numéro de version, si vous le souhaitez:

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

... avec les numéros de version:

$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
la source