Teckenkodning i CSS-formatmallar
Denna artikel beskriver hur du kan hantera teckenkodning i dina CSS-filer. Om du gör detta rätt, så finns det inget behov av att deklarera kodningen i din formatmall. Andra ansatser behövs endast om dina formatmallar innehåller tecken som inte finns i ASCII, och du av något skäl inte kan lita på att teckenkodningen av HTML-koden stämmer överens med teckenkodningen av den använda formatmallen.
I ett sådant fall bör du använda charset eller HTTP-huvuden för att ange teckenkodningen. Som nämnts ovan bör du endast använda denna metod när din formatmall och den HTML-fil som använder formatmallen har olika teckenkodningar. Det är viktigt att förstå att en fastän deklaration charset ser ut som en CSS-regel, så används den inte för att upptäcka teckenkodningen.
| Metod | Användningsfall | Prioritet |
|---|---|---|
| Charset-deklaration | När formatmall och HTML har olika kodningar | Mellan |
| HTTP-huvuden | För webbservrar som stöder det | Högsta |
| Byte-ordnings-märke | Automatisk kodningsuppskriftning | Variabel |
- Endast en bytesekvens charset kan finnas i en extern formatmall
- Den måste vara placerad alldeles i början av dokumentet
- Det får inte finnas några andra tecken före, inte ens kommentarer
Det räcker inte med att bara placera charset "utf-8"; i början av formatmallen — du måste även spara din formatmall i teckenkodningen UTF-8. Se mer om detta i dokumentationen om att använda kodning med ditt innehåll.
Viktigt: Eftersom HTTP-huvuden har högre prioritet än en deklaration av charset i dokumentet, så bör du även ta reda på om teckenkodning redan definieras i HTTP-huvudet. Om det finns ett sådant HTTP-huvud, så måste charset ange samma teckenkodning, och den i dokumentet angivna kodningen kommer bara att ha en praktisk effekt när formatmallen läses i ett sammanhang där kodning inte anges i HTTP-huvud.
Prioriteringsordning och webbläsarstöd
I listan över tekniker att använda finns en uppsättning länkar till dokument som hjälper dig att upptäcka om en deklaration skickas med i HTTP-huvudet. Syntaxspecifikationen för CSS3 säger att om du i din fil har ett byte-ordnings-märke (byte-order mark) som anger UTF-8, så borde detta medföra att webbläsaren läser in formatmallen som UTF-8, oberoende av vad andra deklarationer säger om teckenkodning.
| Webbläsare | Stöd för BOM | Prioriterar HTTP-huvud |
|---|---|---|
| Internet Explorer 10-11 | Begränsat | Ja |
| Moderna webbläsare | Bättre stöd | Ja |
- Byte-ordnings-märket är osynligt i textredigerare
- Det kan stödja automatisk kodningsuppskriftning
- Stödet varierar mellan webbläsare
Oturligt nog så stöds detta för närvarande inte på ett interoperabelt sätt — Internet Explorer 10 och 11 ger fortfarande högre prioritet till HTTP-huvuden och till charset-deklarationer. Så tillsvidare bör du ange charset-deklarationer eller deklarationer i HTTP-huvuden. Det förra har en ytterligare fördel, i att den hjälper de personer som tittar på källkoden att fastställa teckenkodningen av formatmallen.
Det kan vara så att webbservern, för en formatmall, levererar en deklaration av teckenkodning som du inte vill ha, vilket kan bero på serverns standardinställningar eller på specifika parametersättningar. Eller så levererar den ingen information om teckenkodning, när du i själva verket vill att den skall göra det.
- Du kan modifiera webbserverns generella beteende
- Du kan ändra beteende för specifika filer
- Du kan generera innehåll med skriptspråk som PHP
Deklarationen i HTTP-huvudet kommer alltid att ha högre prioritet än deklarationer i dokumentet om det finns en skillnad mellan dessa, förutom för de webbläsare där byte-ordnings-märket har ännu högre prioritet.
Vi rekommenderar ändå att om du behöver använda en HTTP-deklaration för att få till rätt teckenkodning, så bör du ändå ha med en charset-deklaration inne i formatmallen. Detta kommer att säkerställa att man kan få tillgång till kodningsinformation även om formatmallen används lokalt eller får annan lagringsplats.
| Källa | Teckenkodningar | Rekommenderad kolumn |
|---|---|---|
| IANA-register | Flera namn per kodning | Vänstra kolumnen |
| Encoding-specifikationen | Testade webbläsarimplementationer | Primära namn |
Avsikten är bara att ge fullständig information, ifall detta skulle behövas i speciella situationer. Lägg märke till att det ofta talas om charset-namn, fastän det egentligen handlar om teckenkodningar, inte uppsättningar av tecken. Fram till helt nyligen var IANA-registret den plats där man kan hitta namn på teckenkodningar.
I IANA-registret finns ofta flera namn för en och samma kodning. Den nya specifikationen Encoding listar teckenkodningar som provats i existerande webbläsarimplementationer. Du hittar listan i tabellen som finns i den sektion som benämns Encodings. Det är säkrast att använda de namn som anges i den vänstra kolumnen i den tabellen.
Observera dock att bara för att ett namn förekommer i någon av dessa källor, så behöver det inte betyda att det är fritt fram att använda den teckenkodningen. Ett flertal av dessa kodningar har brister. Om du trots allt inte kan använda UTF-8 så bör du noggrant studera vad som sägs i artikeln.
Men detta attribut ska inte anges för ett link-element, eftersom HTML5-specifikationen klassar denna användning som föråldrad.