Serwowanie poprawnego XHTMLa

tech • 427 słów • 3 minuty czytania

Za sprawą znajomego trafiłem na artykuł PornelaIrracjonalne uwielbienie dla XHTML” Wszystkich zachęcam do zapoznania się z tym materiałem. Mnie osobiście skusiło to do kilku refleksji ;)

XHTML nie jest następcą HTML. XHTML i HTML to ten sam język przedstawiony na dwa sposoby — jako XML i SGML. Ich semantyka nie różni się nic a nic, bo krótka specyfikacja XHTML 1 zawiera tylko opis różnic związanych ze składnią, a we wszystkich pozostałych kwestiach odsyła do HTML 4.

Dokument XHTML powinien być serwowany przez serwer jako application/xhtml+xml.

Wysyłanie niepoprawnego XHTML jest gorsze niż wysyłanie niepoprawnego HTML! Jeśli nie umiesz zadbać o poprawny MIME Type dla XHTML-a to po co w ogóle tworzysz strony w tym trybie, skoro taka strona zostanie potraktowana jako HTML? Nie lepiej zostać wtedy przy HTML-u?

Jeśli nie jesteś w stanie zagwarantować, że Twój kod będzie zawsze poprawny, to nie używaj XHTML w ogóle. Półśrodki jak wysyłanie “XHTML” jako HTML tylko zaśmiecają sieć.

Nawet Riddle, pisząc i propagując standardy sieciowe, nie dba o poprawne serwowanie XHTML-a, tym samym wysyłając w sieć sieczkę niepoprawnych tagów.

To nic, że strona przechodzi poprawnie walidację XHTML, walidator W3C nie sprawdzi wielu istotnych rzeczy. Poprawny DOCTYPE i deklaracje XML niczego nie zmienią. Typ pliku określają tylko i wyłącznie nagłówki serwera i żaden kod w pliku tego nie zmieni.

Pornel zaprezentował prosty test - wstawmy w kod “naszego poprawnego XHTMLa” poniższy fragment…

<p style="color:green"><span style="color:red" />
Jeśli ten tekst jest czerwony, to strona jest pełnym błędów HTML, a nie XHTML.</p>

… i zobaczmy wynik.

Poprawnego serwowania XHTML niestety nie rozumie IE i bot Google. To może sprawiać jakąś trudność lub być przeszkodą w zapewnieniu w pełni poprawnego standardu naszym stronom.

Jak zatem zagwarantować poprawny MIME Type dla XHTML zależnie od możliwości poprawnego obsłużenia XHTML-a przez klienta? Dla user-agentów zdolnych obsłużyć poprawnie XHTML serwujemy pliki jako application/xhtml+xml, a dla reszty jako text/html.

Łatwo możemy to uzyskać poprzez wysłanie odpowiednich nagłówków HTTP (w przypadku stron dynamicznych) stosując odpowiedni kod PHP, który można znaleźć w notce Content Negotiation - raz a dobrze Doktora No. (jedyny poprawny kod, uwzględniający wszelkie różnice i problemy).

Lub za pomocą mod_rewrite (dla stron statycznych):

RewriteEngine on
RewriteCond %{HTTP_ACCEPT} application/xhtml\+xml
RewriteCond %{HTTP_ACCEPT} !application/xhtml\+xml\s*;\s*q=0
RewriteCond %{REQUEST_URI} (\.html|\.htm)$
RewriteCond %{THE_REQUEST} HTTP/1\.1
RewriteRule .* - [T=application/xhtml+xml]

Moje dotychczasowe doświadczenia były takie, iż wiedząc o problemie, ale ze względu na problemy IE, wszelki XHTML serwowałem jako text/html. Od dziś postaram się, gdzie to tylko możliwe w swoich stronach (prywatnych), dbać o prawidłowy mime-type plików XHTML-owych, aby nie zaśmiecać sieci sieczką błędnych tagów ;)

W wolnym czasie będę sukcesywnie istniejące już strony do tego dostosowywał.

Komentarze (4)

kwiateusz avatar
kwiateusz
20070729-183414-kwiateusz

Brawo Mal ^^ nie na darmo sie na tlenie tworzyłem widze :D

wallace avatar
wallace
20070730-004420-wallace

Hmm, a w jakim sensie bot Google nie rozumie application/xhtml+xml?

Przed chwilą sprawdziłem, kod Doktora No. podaje botu google text/html, ale to jeszcze nic nie znaczy. A zastanawiam się, bo np. application/atom+xml bardzo chętnie wsysają boty. Aż sprawdzę doświadczalnie.

ps. odnośnie skryptu Doktora No. Jeżeli tylko nim serwujemy kodowanie znaków to IE lubi je zgubić. Pomaga ustalenie w meta, ale może ktoś zna lepsze rozwiązanie?

MalCom avatar
MalCom
20070730-012655-malcom

Kod ten nie odróżnia czy to IE i bot, ale na podstawie wysłanych przez klienta informacji w nagłówkach o akceptowanych formatach wysyła odpowiedni typ MIME. Widocznie googlowski bot w akceptowanych formatach nie wspomina o poprawnej obsłudze application/xhtml+xml ;)

Odnośnie kodowania, to myślę, że meta można pozostawić, w końcu większy priorytet dla XHTMLa mają nagłówki, a w przypadku HTMLa nie będzie problemu z krzaczkami.

Nagłówki HTTP mają największy priorytet, więc jeśli poprawnie wyśle się informacje o kodowaniu to meta można olać i nie będzie problemów z krzaczorami… Na docs.malcom.pl tak mam i problemów jeszcze nie zauważyłem ;)

Przepisy avatar
Przepisy
20080101-214432-przepisy

Kolejny przydatny materiał! Dzięki!

Dodaj komentarz

/dozwolony markdown/

/nie zostanie opublikowany/