Bagaimana cara saya melayani XHTML ke Internet Explorer tanpa melanggar Chrome?

8

Saya menjalankan forum yang melayani halaman-halamannya sebagai XHTML + MathML + SVG; sepenuhnya:

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

Menggunakan plugin MathPlayer, pengguna Internet Explorer dapat menggunakan situs ini. Namun, kadang-kadang seseorang menggunakan forum dari IE dan tidak dapat menginstal MathPlayer (mungkin mereka berada di mesin publik di suatu tempat). Kemudian IE (setidaknya 6 & 7) mengeluh tentang XHTML dan menawarkan hanya untuk mengunduh file.

Saya membaca di situs w3c bagaimana menyiasatinya menggunakan transformasi XSL ( http://www.w3.org/MarkUp/2004/xhtml-faq#ie ). Ketika saya menempatkan ini pada tempatnya, saya menemukan bahwa Chrome sekarang mengeluh sangat tentang entitas yang tidak terdefinisi (yang spesifik &nbsp;tetapi pengujian menunjukkan bahwa itu tidak relevan).

Anehnya, saya bisa menyelesaikan ini dengan secara manual mendeklarasikan entitas di 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;">
]>

tapi saya lebih suka tidak melakukan ini untuk keseluruhan entitas yang mungkin. Saya mengatakan "aneh" karena XHTML + MathML + SVG dtd, sejauh yang saya bisa lihat, menyatakan entitas ini. Jadi, entah bagaimana, ini terlewatkan.

Apakah ada cara untuk mengatasi masalah ini? Bisakah saya melayani XHTML-with-entitas ke IE?

Dalam hal ini penting, halaman dihasilkan oleh skrip php dan dilayani melalui apache, jadi jika ada metode yang dapat diandalkan mengendus browser dan memodifikasi awal dokumen (jadi hanya mengirim <?xml-stylesheet ...>bit ke IE) maka itu akan menjadi alternatif yang bisa diterima.

(Saya harap saya memiliki situs SE yang tepat ... tolong beri tahu saya jika saya berada di tempat yang salah. Lakukan dengan tag.)

Andrew Stacey
sumber
Pertanyaan HTML / CSS murni (X) milik stackoverflow.com, tetapi pertanyaan Anda tidak semudah itu, seperti yang Anda sebutkan kemungkinan solusi sisi server, jadi saya tidak menandainya untuk dipindah. Jika Anda tidak mendapatkan jawaban di sini maka saya akan menghapusnya dan meletakkannya di sana. Beberapa pertanyaan HTML cenderung dijawab dalam hitungan detik!
paulmorriss
@paulmoriss: Terima kasih atas klarifikasi (sebagian!). Kadang-kadang dalam kerumitan situs SE saya agak tersesat ...
Andrew Stacey
Membaca ulang komentar saya, saya mungkin tidak terlalu jelas. Maksud saya "jika saya jadi Anda, saya akan menghapusnya ...". Terserah kamu.
paulmorriss
@paulmoriss: Ini adalah masalah konfigurasi sisi server karena ini tentang mengatasi peramban yang tidak dapat menangani XHTML dan cara mengirimi mereka sesuatu yang dapat mereka atasi. Memindai daftar pertanyaan "terkait", tampaknya ada banyak ide yang serupa. Tapi aku tidak tahu apa ruang lingkup ini situs (dan semakin saya membaca, semakin bingung saya mendapatkan) dan saya tidak punya jawaban apapun, jadi saya akan mengikuti saran Anda (dalam beberapa saat).
Andrew Stacey

Jawaban:

1

[I] f ada metode yang dapat diandalkan mengendus browser dan memodifikasi awal dokumen (jadi hanya mengirim bit ke IE) maka itu akan menjadi alternatif yang dapat diterima.

Pernyataan PHP ini akan cocok dengan peramban apa pun yang menyertakan "MSIE" di string agen pengguna dan Anda bisa memperbaiki kriteria dengan menambahkan nomor versi, jika diinginkan:

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

... dengan nomor versi:

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