XHTML serwowany jako XML Drukuj
Ocena użytkowników: / 0
SłabyŚwietny 
Wpisany przez Patryk yarpo Jar   
wtorek, 26 października 2010 14:52

XHTML miał zrewolucjonizować internet. Nie wiem, czym. Fakt, że miał. Tak naprawdę cudowne właściwości przypisywane XHTMLowi nie mają zbyt wielkiego odzwierciedlenia w rzeczywistości. Głównie dlatego, że większość "xhtmlowych" stron, to tak narpawdę nie do końca poprawny htmlowy twór. Spróbuję pokazać, jak wysyłać strony w XHTML, aby nie były już li tylko marną mistyfikacją nowoczesności (zakładając, że X w nazwie nowoczesność daje :P ).

Kod "XHTML"

Poniższy kod, przez wielu będzie uznany za w pełni poprawny kod XHTML. Ba! Walidator W3C też będzie twierdził, że to jest strona XHTML.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" 
   "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
    <title>czy to już XHTML?</title>
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
</head>
<body>
</body>
</html>

Zróbmy jednak prosty test. Dajmy na tej stronie taki kod:

<div style="color:blue"><div style="color:red"/>Ten kolor jest czerwony w HTML i niebieski w XHTML</div>

Jaki będzie wynik? Tekst będzie koloru czerwonego. Jak to?! Niemożliwe. Przecież mamy DOCTYPE XHTML. Przecież walidator mówi, że to strona XHTML. Co się stało?

 

Content-type

A no tak. Przecież ustawiliśmy typ pliku na text/html. Zaraz, tylko to zmienimy i będzie już działać.

<meta http-equiv="content-type" content="text/html;charset=utf-8" />

Zmieniamy na:

<meta http-equiv="content-type" content="application/xhtml+xml;charset=utf-8" />

 

Teraz powinno działać... Nie! Znów nie działa :(

No co jest, przecież my mamy taką super hiper stronę XHTML. Iwalidator, znowu uważa, że to jest strona w nowoczesnym formacie: wynik walidacji.

 

Nagłówek XML w pliku

No oczywiście, zapomnieliśmy o jeszcze jednej ważnej sprawie. Nagłówku XML w pliku. Teraz będzie działać:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
   "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

 

Teraz to już na pewno będzie poprawny XHTML. Walidatorowi się podoba ten "XHTML". Ale nadal nasz test pokazuje, że tekst jest czerwony. Co jest nie tak?

 

XML

Aby strona napisane przy użyciu kodu zgodnego z formatem XHTML była odebrana jako aplikacja XML musimy przed wysłaniem choćby jednego znaku do przeglądarki wysłaś jej informacje: "UWAGA - XML!". W przeciwnym razie uzyskamy stronę HTML z dziwnymi ukośnikami. Jeśli nie chcemy wysyłaź XHTML jako XML to może lepiej używać HTML 4.01 strict? Równie dobrze oddziela warstwę prezentacji od struktury).

 

Rozwiązanie w PHP

Jako, że w Polsce to najczęściej wykorzystywany język programowania, to przykład będzie właśnie w nim:

<?php
header('Content-Type: application/xhtml+xml;charset=utf-8');
echo '<?xml version="1.0" encoding="utf-8"?>';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" 
   "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
    <title>czy to już XHTML?</title>
    <meta http-equiv="content-type" content="application/xhtml+xml;charset=utf-8" />
</head>
<body>

</body>
</html>

Taka strona będzie odebrana jako XML. A więc stosowanie XHTMLa ma sens.

Teraz zarówno walidator akceptuje ten kod jako XHTML, jak i udało się przejść nasz test - tekst jest niebieski.
 

Problemy z XHTML

Spróbuj zmienić kod na taki:

<div style="color:blue"><div style="color:red"/>Ten kolor jest czerwony w HTML i niebieski w XHTML</DIV>

Zmieniłem wielkość liter w ostatnim div. Teraz nie wyświetli się nam nic :(.

Jest to jeden z powodów, dla których XHTML nawet przez doświadczonych i świadomych webmasterów jest podawany jako HTML. Ale to już jest kolejna długa historia :)