Innehåll

  1. Introduktion
  2. Historik
  3. Webbstandarder
  4. Struktur och presentation
  5. (X)HTML
  6. CSS
  7. Tillgänglighet
  8. URL:er
  9. Referenser
  10. Ordlista

5. (X)HTML

Introduktion

Det går lika bra att bygga moderna, strukturerade webbplatser som följer webbstandarder med HTML 4.01 som med XHTML 1.0, men för att påskynda övergången till ren, semantisk kod, och att vara bättre förberedd för en eventuell övergång till XML och andra framtida uppmärkningsspråk, rekommenderar jag att man använder XHTML 1.0 Strict för nyproducerade webbplatser. Det är också vad som används i exemplen i detta dokument.

XHTML 1.0 är en omformulering av HTML 4 i XML 1.0 och är framtaget för att ersätta HTML. XHTML 1.0 Strict, som är det jag rekommenderar att man använder, tillåter inte element eller attribut som styr presentationen (det gör inte HTML 4.01 Strict heller, men jag har valt att fokusera på XHTML här). Därmed tvingar XHTML 1.0 Strict fram separation av struktur och presentation.

XHTML 1.1, som är den nyaste versionen av XHTML, är tekniskt något mer problematisk att använda, eftersom specifikationen säger att sådana dokument bör ha MIME-typen application/xhtml+xml, och bör ej skickas som text/html. Det är inte strikt förbjudet att använda text/html, men det bör undvikas. Däremot kan HTML-kompatibel XHTML 1.0 skickas med MIME-typen text/html, även om man bör använda application/xhtml+xml. Se W3C:s dokument XHTML Media Types för en översikt av de MIME-typer som rekommenderas av W3C.

Tyvärr har flera äldre webbläsare och Internet Explorer ingen aning om vad application/xhtml+xml är, och kan reagera genom att visa källkoden eller helt vägra visa dokumentet.

Om man vill använda application/xhtml+xml bör man därför låta servern känna av om webbläsaren som efterfrågar ett dokument hanterar den MIME-typen och då använda den, och använda text/html för andra webbläsare.

Om man använder PHP som skriptspråk på servern kan man använda följande skript för att skicka olika MIME-typ till olika webbläsare:

<?php
if (stristr($_SERVER["HTTP_ACCEPT"], "application/xhtml+xml") || 
stristr($_SERVER["HTTP_USER_AGENT"],"W3C_Validator")) {
    header("Content-Type: application/xhtml+xml; charset=iso-8859-1");
    header("Vary: Accept");
    echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");
    }
else {
    header("Content-Type: text/html; charset=iso-8859-1");
    header("Vary: Accept");
    }
?>

Skriptet kontrollerar om webbläsaren skickar en Accept HTTP header som innehåller ”application/xhtml+xml”, eller om det är W3C:s HTML-Validerare som efterfrågar dokumentet. Den skickar inte en fullständig Accept HTTP header, men hanterar ändå application/xhtml+xml. I båda fallen skickas dokumentet som application/xhtml+xml. En XML-deklaration skickas också. Till andra webbläsare, inklusive alla versioner av Internet Explorer, skickas dokumentet som text/html. Ingen XML-deklaration läggs till i början av dokumentet, eftersom det får IE/Win att använda sitt buggläge, och det vill vi inte.

Efter Content-Type headern skickas en Vary header för att informera mellanliggande cacher, till exempel proxyservrar, att dokumentets MIME-type är olika beroende på vad webbläsaren som efterfrågar dokumentet hanterar.

För ett mer avancerat PHP-baserat skript, gå till Serving up XHTML with the correct MIME type. Det skriptet tar också hänsyn till den efterfrågande webbläsarens q-rating (hur bra den uppger sig hantera en viss MIME-typ), och konverterar XHTML till HTML 4 innan dokumentet skickas som text/html till webbläsare som inte hanterar application/xhtml+xml.

Här är ett liknande skript för ASP and VBScript:

<%
If InStr(Request.ServerVariables("HTTP_ACCEPT"), "application/xhtml+xml") > 0 
Or InStr(Request.ServerVariables("HTTP_USER_AGENT"), "W3C_Validator") > 0 Then
    Response.ContentType = "application/xhtml+xml"
    Response.Write("<?xml version=""1.0"" encoding=""iso-8859-1""?>" & VBCrLf);
Else
    Response.ContentType = "text/html"
End If
Response.Charset = "iso-8859-1"
%>

Det är bra att känna till att när MIME-typen application/xhtml+xml används kommer vissa webbläsare, som till exempel Mozilla, att vägra visa dokument som innehåller felaktig XHTML. Det kan vara bra när man utvecklar eller felsöker, men kan vara problematiskt på en publicerad webbplats om man inte alltid har full kontroll över att all kod är och förblir korrekt. Om så är fallet kan det vara aktuellt att överväga om man ska använda HTML 4.01 Strict i stället.

Här är en lista av de viktigaste sakerna att tänka på när man ska skriva XHTML i stället för HTML:

Läs mer:

Doctype

I dag har väldigt få HTML-dokument en korrekt Doctype, eller DTD (Document Type Declaration). Förr var den mer dekorativ än funktionell, men sedan några år tillbaka kan närvaron av en Doctype-deklaration göra stor skillnad på hur ett dokument visas i en webbläsare.

Alla HTML- och XHTML-dokument måste ha en Doctype-deklaration för att vara giltiga. Den anger vilken version av HTML eller XHTML man använder, och används dels när man validerar dokumentet, dels för att avgöra om en webbläsare ska använda standardläge eller inte. Om en fullständig, korrekt Doctype-deklaration finns i ett dokument kommer många webbläsare att byta till standardläge, vilket innebär att de kommer att tolka CSS mer korrekt. Dessutom kommer dokumentet att visas snabbare eftersom webbläsaren inte behöver försöka tolka och kompensera för felaktig HTML. Det gör också att skillnaden mellan hur olika webbläsare visar dokumentet minskar.

Följande Doctype anger att dokumentet är XHTML 1.0 Strict och gör att de webbläsare som har så kallad ”doctype switching” använder sitt standardläge:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

Läs mer:

Teckenkodning

Man ska alltid ange vilken teckenkodning som används i ett XHTML-dokument.

Det bästa är om webbservern kan ställas in så att den skickar en HTTP content-type header som anger vilken teckenkodning som används. För mer detaljerad information om hur man gör detta, se dokumentationen för den webbserverprogramvara som används.

Om man använder Apache, kan man ange teckenkodningen genom att lägga till en eller flera regler i sin .htaccess-fil. För att till exempel ange att alla filer använder utf-8, lägger man till följande:

AddDefaultCharset utf-8

För att ange teckenkodningen för alla filer med en viss filändelse används följande:

AddCharset utf-8 .html

Om webbservern tillåter att PHP-skript körs kan man använda följande för att ange teckenkodningen:

<?php
    header("Content-Type: application/xhtml+xml; charset=utf-8");
?>

För att skicka dokumenten som HTML, ändra application/xhtml+xml till text/html. Om man av någon anledning inte kan konfigurera webbservern så att den anger den använda teckenkodningen, bör man använda ett <meta>-element i dokumentets <head>-sektion för att ange teckenkodningen. Det är för övrigt en bra idé att göra det även om webbservern är korrekt inställd.

Till exempel anger

<meta http-equiv="content-type" content="text/html;
charset=ISO-8859-1" />

att man använder teckenkodningen ISO-8859-1.

Läs mer:

Kommentarer, frågor eller förslag? Kontakta mig.

© Copyright 2004-2008 Roger Johansson