Wie kann ich XHTML für Internet Explorer bereitstellen, ohne Chrome zu beschädigen?

8

Ich betreibe ein Forum, dessen Seiten als XHTML + MathML + SVG dienen. vollständig:

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

Mit dem MathPlayer-Plugin können Internet Explorer-Benutzer diese Site verwenden. Manchmal verwendet jedoch jemand das Forum vom IE und kann MathPlayer nicht installieren (möglicherweise befindet er sich irgendwo auf einem öffentlichen Computer). Dann beschwert sich IE (mindestens 6 & 7) über das XHTML und bietet nur an, die Datei herunterzuladen.

Ich habe auf der w3c-Website gelesen, wie man dies mithilfe einer XSL-Transformation umgeht ( http://www.w3.org/MarkUp/2004/xhtml-faq#ie ). Als ich dies einführte, stellte ich fest, dass Chrome sich jetzt lautstark über undefinierte Entitäten beschwerte (die spezifische war, &nbsp;aber Tests zeigten, dass dies nicht relevant ist).

Seltsamerweise kann ich dies umgehen, indem ich die Entitäten im DOCTYPE manuell deklariere:

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

aber ich würde dies lieber nicht für die gesamte Bandbreite der möglichen Entitäten tun. Ich sage "bizarr", weil die XHTML + MathML + SVG dtd, soweit ich sehen kann, diese Entitäten deklariert. Irgendwie werden diese also verpasst.

Gibt es einen Weg, um dieses Problem zu umgehen? Kann ich XHTML-with-Entities für den IE bereitstellen?

Falls es darauf ankommt, werden die Seiten von einem PHP-Skript generiert und über Apache bereitgestellt. Wenn es also eine zuverlässige Methode gibt, den Browser zu beschnüffeln und den Anfang des Dokuments <?xml-stylesheet ...>zu ändern (also nur das Bit an den IE zu senden ), wäre dies eine akzeptable Alternative.

(Ich hoffe, ich habe die richtige SE-Site ... bitte lassen Sie mich wissen, wenn ich am falschen Ort bin. Das Gleiche gilt für die Tags.)

Andrew Stacey
quelle
Reine (X) HTML / CSS-Fragen gehören zu stackoverflow.com, aber Ihre sind nicht so einfach, da Sie eine mögliche serverseitige Lösung erwähnen, sodass ich sie nicht zum Verschieben kennzeichne. Wenn Sie hier keine Antwort erhalten, würde ich sie löschen und dort anbringen. Einige HTML-Fragen werden in der Regel innerhalb von Sekunden beantwortet!
Paulmorriss
@ Paulmoriss: Danke für die (teilweise!) Klarstellung. Manchmal verliere ich mich im Morast der SE-Sites ein bisschen ...
Andrew Stacey
Wenn ich meinen Kommentar noch einmal lese, bin ich möglicherweise nicht sehr klar. Ich meine "wenn ich du wäre, würde ich es löschen ...". Es liegt an dir.
Paulmorriss
@paulmoriss: Es handelt sich um ein serverseitiges Konfigurationsproblem, da es darum geht, mit einem Browser umzugehen , der nicht mit XHTML umgehen kann, und ihnen etwas zu senden, mit dem sie fertig werden können. Beim Durchsuchen der Liste der "verwandten" Fragen scheint es eine Menge ähnlicher Ideen zu geben. Aber ich weiß nicht, was der Umfang dieser Website ist (und je mehr ich lese, desto verwirrter werde ich) und ich habe keine Antworten erhalten, daher werde ich Ihrem Rat folgen (in kurzer Zeit).
Andrew Stacey

Antworten:

1

[I] Wenn es eine zuverlässige Methode gibt, den Browser zu schnüffeln und den Anfang des Dokuments zu ändern (also nur das Bit an den IE zu senden), wäre dies eine akzeptable Alternative.

Diese PHP-Anweisung stimmt mit allen Browsern überein, die "MSIE" in der Benutzeragentenzeichenfolge enthalten. Falls gewünscht, können Sie die Kriterien durch Hinzufügen einer Versionsnummer verfeinern:

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

... mit Versionsnummern:

$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
quelle