Come posso servire XHTML su Internet Explorer senza interrompere Chrome?


8

Gestisco un forum che funge da XHTML + MathML + SVG; in toto:

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

Utilizzando il plug-in MathPlayer, gli utenti di Internet Explorer possono utilizzare questo sito. Tuttavia, a volte qualcuno sta usando il forum di IE e non è in grado di installare MathPlayer (forse sono su una macchina pubblica da qualche parte). Quindi IE (almeno 6 e 7) si lamenta dell'XHTML e offre solo di scaricare il file.

Ho letto sul sito w3c come aggirare questo problema usando una trasformazione XSL ( http://www.w3.org/MarkUp/2004/xhtml-faq#ie ). Quando ho messo questo in atto, ho scoperto che Chrome ora si lamentava rumorosamente di entità indefinite (quello specifico era &nbsp;ma i test mostrano che non è rilevante).

Stranamente, posso aggirare questo dichiarando manualmente le entità nel 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;">
]>

ma preferirei non farlo per l'intera gamma di entità possibili. Dico "stranamente" perché il dtd XHTML + MathML + SVG, per quanto posso vedere, dichiara queste entità. Quindi in qualche modo questi si stanno perdendo.

C'è un modo per aggirare questo problema? Posso servire XHTML-with-entity in IE?

Nel caso in cui sia importante, le pagine sono generate da uno script php e sono servite tramite apache, quindi se esiste un metodo affidabile per annusare il browser e modificare l'inizio del documento (quindi inviare solo il <?xml-stylesheet ...>bit a IE), allora sarebbe un alternativa accettabile.

(Spero di avere il sito SE giusto ... per favore fatemi sapere se sono nel posto sbagliato. Idem con i tag.)


Le domande pure (X) HTML / CSS appartengono a stackoverflow.com, ma le tue non sono così semplici, poiché menzioni una possibile soluzione lato server, quindi non lo contrassegno per lo spostamento. Se non ottieni alcuna risposta qui, la eliminerei e la inserirò lì. Alcune domande HTML tendono a ricevere risposta in pochi secondi!
paulmorriss,

@paulmoriss: grazie per il chiarimento (parziale!). A volte, nel caos dei siti SE, mi perdo un po '...
Andrew Stacey,

Rileggendo il mio commento, potrei non essere molto chiaro. Voglio dire "se fossi in te, lo cancellerei ...". Tocca a voi.
paulmorriss,

@paulmoriss: si tratta di un problema di configurazione sul lato server poiché riguarda la gestione di un browser che non è in grado di gestire XHTML e come inviare loro qualcosa a cui possono far fronte. Scansionando l'elenco di domande "correlate", sembra che ci siano molte idee simili nell'idea. Ma non so quale sia lo scopo di questo sito (e più leggo, più mi confondo) e non ho avuto risposte, quindi seguirò il tuo consiglio (tra poco).
Andrew Stacey,

Risposte:


1

[I] f esiste un metodo affidabile per annusare il browser e modificare l'inizio del documento (quindi inviare solo il bit a IE), che sarebbe un'alternativa accettabile.

Questa istruzione PHP corrisponderà a tutti i browser che includono "MSIE" nella stringa dell'agente utente e, se lo si desidera, è possibile perfezionare i criteri aggiungendo un numero di versione:

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

... con i numeri di versione:

$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.')));
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.