Làm cách nào để phục vụ XHTML cho Internet Explorer mà không phá vỡ Chrome?


8

Tôi điều hành một diễn đàn phục vụ các trang của nó là XHTML + MathML + SVG; đầy đủ:

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

Sử dụng plugin MathPlayer, người dùng Internet Explorer có thể sử dụng trang web này. Tuy nhiên, đôi khi ai đó đang sử dụng diễn đàn từ IE và không thể cài đặt MathPlayer (có thể họ đang ở trên một máy công cộng ở đâu đó). Sau đó IE (ít nhất là 6 & 7) phàn nàn về XHTML và cung cấp chỉ để tải xuống tệp.

Tôi đã đọc trên trang w3c cách khắc phục điều này bằng cách sử dụng chuyển đổi XSL ( http://www.w3.org/MarkUp/2004/xhtml-faq#ie ). Khi tôi đặt vấn đề này, tôi thấy rằng Chrome hiện đang phàn nàn rất nhiều về các thực thể không xác định (cụ thể là &nbsp;nhưng các thử nghiệm cho thấy điều đó không liên quan).

Thật kỳ lạ, tôi có thể làm tròn điều này bằng cách khai báo thủ công các thực thể trong 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;">
]>

nhưng tôi không muốn làm điều này cho toàn bộ gam của các thực thể có thể. Tôi nói "kỳ quái" bởi vì dHTML XHTML + MathML + SVG, theo như tôi có thể thấy, khai báo các thực thể này. Vì vậy, bằng cách nào đó những điều này đang bị bỏ lỡ.

Có cách nào xung quanh vấn đề này? Tôi có thể phục vụ XHTML-with-entity cho IE không?

Trong trường hợp có vấn đề, các trang được tạo bởi tập lệnh php và được phân phát qua apache, vì vậy nếu có một phương pháp đáng tin cậy để đánh hơi trình duyệt và sửa đổi phần đầu của tài liệu (vì vậy chỉ gửi <?xml-stylesheet ...>bit đến IE) thì đó sẽ là một thay thế chấp nhận được.

(Tôi hy vọng tôi có trang web SE phù hợp ... vui lòng cho tôi biết nếu tôi ở sai vị trí. Ditto với các thẻ.)


Các câu hỏi HTML / CSS thuần (X) thuộc về stackoverflow.com, nhưng câu hỏi của bạn không đơn giản như vậy, vì bạn đề cập đến một giải pháp phía máy chủ có thể, vì vậy tôi không gắn cờ cho việc di chuyển. Nếu bạn không nhận được câu trả lời nào ở đây thì tôi sẽ xóa nó và đặt nó lên đó. Một số câu hỏi HTML có xu hướng được trả lời trong vài giây!
paulmorriss

@paulmoriss: Cảm ơn bạn đã làm rõ (một phần!). Đôi khi trong các trang web SE, tôi có một chút lạc lõng ...
Andrew Stacey

Đọc lại nhận xét của tôi, tôi có thể không rõ ràng lắm. Ý tôi là "nếu tôi là bạn, tôi sẽ xóa nó ...". Tuỳ bạn.
paulmorriss

@paulmoriss: Đây vấn đề cấu hình phía máy chủ vì đó là về việc đối phó với trình duyệt không thể xử lý XHTML và cách gửi cho họ thứ gì đó mà họ có thể đối phó. Quét danh sách các câu hỏi "liên quan", có vẻ rất nhiều ý tưởng tương tự nhau. Nhưng tôi không biết điều gì phạm vi này trang web là (và tôi càng đọc, càng có nhiều nhầm lẫn tôi nhận được) và tôi đã không có bất kỳ câu trả lời, vì vậy tôi sẽ làm theo lời khuyên của bạn (trong một thời gian ngắn).
Andrew Stacey

Câu trả lời:


1

[Tôi] có một phương pháp đáng tin cậy để đánh hơi trình duyệt và sửa đổi phần đầu của tài liệu (vì vậy chỉ gửi bit đến IE) thì đó sẽ là một cách thay thế chấp nhận được.

Câu lệnh PHP này sẽ khớp với bất kỳ trình duyệt nào có "MSIE" trong chuỗi tác nhân người dùng và bạn có thể tinh chỉnh các tiêu chí bằng cách thêm số phiên bản, nếu muốn:

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

... với số phiên bản:

$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.')));
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.