XHTML? Czy aby nie zostałeś oszukany?
Jeżeli kodujesz strony w formacie XHTML to pewnie dlatego że ktoś Ci powiedział/przeczytałeś że XHTML jest nowym standardem, jest lepszy dla przeglądarek, szybciej się ładuje, no i stoi za tym ten cały XML! To musi być lepsze!
Ten ktoś pewnie zapomniał dodać że jest mały, malutki szkopuł.
Twój wspaniale sformatowany XHTML (czy to 1.0 Trans/Strict czy nawet 1.1) dla przeglądarki jest niczym innym niż zwykły HTML z paroma ukośnikami na końcu tagów, przy których ukośnika wcale być nie powinno.
Powiesz pewnie, „no tak, ale przecież validator wykrywa mój DOCTYPE i traktuje stronę jako XHTML”. To nic. Dla przeglądarki twój kod nie jest wcale niczym specjalnie innym od zwykłej „zupy tagów”.
Co się za tym kryje? Tak zwany „MIME TYPE”. Pewnie już to gdzieś słyszałeś. Jest to parametr który określa typ danego pliku, czy tekstowego, czy wideo, czy flash, czy XML.
Standartowo twoje dokumenty xhtml wysyłają MIME TYPE: Content-type: text/html, czyli, jak widzisz do przeglądarki podają prawie że zwykły tekst. Żeby dokument był traktowany jako XML musisz podać MIME TYPE: Content-type: application/xhtml+xml. Wtedy przeglądarka zinterpretuje twój plik jako prawdziwy plik XML i tak jak to powinno być, przy złym zakodowaniu tagów zamiast wyświetlić na tyle na ile można sformatową stronę wyświetli błąd przy parsowaniu XML’a.
To wszystko??? Wystarczy tylko to zmienić? Cóż… Nie.
Problem polega na tym iż np. (jak zwykle) IE nie wspiera tego rodzaju dokumentu, zamiast strony lub komunikatu o błędzie po wczytaniu strony dostaniemy okienko z prośbą zapisania pliku. Kicha!
Co możemy zrobić? Wykryć na początku czy klient (przeglądarka) obsługuje dany typ i zaserwować odpowiedni MIME-TYPE. Dla przeglądarek które obsługują XML: application/xhtml+xml, dla reszty text/html.
Można to zrobić za pomocą zwykłej instrukcji warunkowej PHP (i nie tylko), na początku strony wystarczy dodać kod:
if ( isset($_SERVER["HTTP_ACCEPT"]) and stristr($_SERVER["HTTP_ACCEPT"],”application/xhtml+xml”) ) {
header(”Content-type: application/xhtml+xml”);
}
else {
header(”Content-type: text/html”);
}
?>
Uwaga! Wysyłamy tutaj nagłówki, tak więc kod powinien być wstawiony przed jaką kolwiek treścią na stronie, inaczej dostaniemy komunikat „Header allready sent.”.
Jest to tylko krótki wstęp do całego zagadnienia, ale z pewnością wystarczy aby skłonić was do zajrzenia do doskonałego artykuły na ten temat na stronie XML.com:
Dowiecie się stamtąd wielu innych ważnych kwestii, np. jak zmienić i wykryć obsługę MIME TYPE w inny sposób niż PHP, jakie konsekwencje niesie za sobą używanie XML’a (np. dla JavaScript, CSS).
Warto też spojrzeć na ten artykuł autorstwa Ian Hickson’a, członka tematu Mozzily, Opery w sprawach XML’a. Dowiemy się z niego o tym kiedy należy stosować jaki MIME TYPE. Ian np. Twierdzi że XHTML w ogóle nie powinien być serwowany jako text/html. Oceńcie sami.
No comments
Jump to comment form | comments rss [?] | trackback uri [?]