Tegnkodninger i HTML - Character encodings in HTML

Mens Hypertext Markup Language ( HTML ) har været i brug siden 1991, var HTML 4.0 fra december 1997 den første standardiserede version, hvor internationale karakterer fik en rimelig komplet behandling. Når et HTML-dokument indeholder specialtegn uden for området for syv-bit ASCII , er to mål værd at overveje: informationens integritet og universelle browservisning .

Angivelse af dokumentets tegnkodning

Der er flere måder at angive, hvilken tegnkodning der bruges i dokumentet. For det første kan webserveren inkludere tegnkodning eller " charset" i overskriften Hypertext Transfer Protocol (HTTP) Content-Type, som typisk ser sådan ud:

Content-Type: text/html; charset=ISO-8859-4

Denne metode giver HTTP -serveren en bekvem måde at ændre dokumentets kodning i henhold til indholdsforhandling ; visse HTTP -serversoftware kan gøre det, f.eks. Apache med modulet mod_charset_lite .

For HTML er det muligt at inkludere disse oplysninger inde i headelementet nær toppen af ​​dokumentet:

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

HTML5 tillader også følgende syntaks at betyde nøjagtig det samme:

<meta charset="utf-8">

XHTML -dokumenter har en tredje mulighed: at udtrykke tegnkodningen via XML -erklæring som følger:

<?xml version="1.0" encoding="ISO-8859-1"?>

Da tegnkodningen ikke kan kendes, før denne erklæring er analyseret, kan der være et problem med at vide, hvilken kodning der bruges til selve erklæringen. Hovedprincippet er, at erklæringen skal være kodet i ren ASCII, og derfor (hvis erklæringen er inde i filen) skal kodningen være en ASCII -udvidelse . For at tillade kodninger, der ikke er bagudkompatible med ASCII, skal browsere være i stand til at analysere erklæringer i sådanne kodninger. Eksempler på sådanne kodninger er UTF-16BE og UTF-16LE .

Koder til detekteringsalgoritme

Fra HTML5 er det anbefalede tegnsæt UTF-8 . En "kodningssniffealgoritme" er defineret i specifikationen for at bestemme tegnkodningen af ​​dokumentet baseret på flere inputkilder, herunder:

  1. Eksplicit brugervejledning
  2. Et eksplicit metatag inden for de første 1024 bytes i dokumentet
  3. Et byteordremærke inden for de tre første bytes i dokumentet
  4. HTTP-indholdstype eller andre transportlagsoplysninger
  5. Analyse af dokumentbytes på udkig efter specifikke sekvenser eller byteområder og andre foreløbige detektionsmekanismer.

Tegn uden for det udskrivbare ASCII -område (32 til 126) vises normalt forkert. Dette giver nogle problemer for engelsk talende brugere, men andre sprog regelmæssigt-i nogle tilfælde, altid-kræver tegn uden for dette område. I kinesiske, japanske og koreanske ( CJK ) sprogmiljøer , hvor der er flere forskellige multi-byte-kodninger i brug, bruges automatisk registrering også ofte. Endelig tillader browsere normalt også, at brugeren også tilsidesætter forkert tegnsætetiket manuelt.

Det er mere og mere almindeligt, at flersprogede websteder og websteder på ikke-vestlige sprog bruger UTF-8 , som tillader brug af den samme kodning for alle sprog. UTF-16 eller UTF-32 , som også kan bruges til alle sprog, er mindre udbredt, fordi de kan være sværere at håndtere i programmeringssprog, der antager en byte-orienteret ASCII-superset-kodning, og de er mindre effektive til tekst med en høj frekvens af ASCII -tegn, hvilket normalt er tilfældet for HTML -dokumenter.

Vellykket visning af en side er ikke nødvendigvis en indikation på, at dens kodning er angivet korrekt. Hvis sidens skaber og læser begge antager en platformsspecifik tegnkodning, og serveren ikke sender nogen identificerende oplysninger, vil læseren ikke desto mindre se siden, som skaberen havde til hensigt, men andre læsere på forskellige platforme eller med forskellige modersmål vil ikke se siden efter hensigten.

Tilladte kodninger

Den WHATWG Encoding Standard, der refereres til af seneste HTML standarder (den nuværende WHATWG HTML levestandard, samt den tidligere konkurrerende W3C HTML 5.0 og 5.1) angiver en liste over kodninger som browsere skal understøtte. HTML -standarderne forbyder understøttelse af andre kodninger. Kodningsstandarden fastsætter endvidere, at nye formater, nye protokoller (selv når eksisterende formater bruges) og forfattere af nye dokumenter er forpligtet til udelukkende at bruge UTF-8 .

Udover UTF-8 er følgende kodninger eksplicit opført i selve HTML-standarden med henvisning til kodningsstandarden:

Følgende yderligere kodninger er angivet i kodningsstandarden, og understøttelse af dem er derfor også påkrævet:

Følgende kodninger er angivet som eksplicitte eksempler på forbudte kodninger:

Standarden definerer også en "erstatnings" dekoder, der tilknytter alt indhold, der er mærket som visse kodninger, til erstatningstegnet ( ) og nægter at behandle det overhovedet. Dette er beregnet til at forhindre angreb (f.eks. Cross -site scripting ), som kan udnytte en forskel mellem klienten og serveren i, hvilke kodninger der understøttes for at maskere ondsindet indhold. Selvom den samme sikkerhedsproblem gælder for ISO-2022-JP og UTF-16 , som også tillader sekvenser af ASCII-bytes at blive fortolket forskelligt, blev denne tilgang ikke betragtet som mulig for dem, da de er relativt hyppigere brugt i implementeret indhold. Følgende kodninger modtager denne behandling:

Karakterreferencer

Ud over oprindelige tegnkodninger kan tegn også kodes som tegnreferencer , som kan være numeriske tegnreferencer ( decimal eller hexadecimal ) eller tegnentitetsreferencer . Tegnenhedsreferencer kaldes også undertiden navngivne enheder eller HTML -objekter for HTML. HTML's brug af tegnreferencer stammer fra SGML .

HTML -tegnreferencer

En numerisk tegn henvisning i HTML refererer til et tegn ved sin Universal Character Set / Unicode kode punkt , og bruger formatet

&#nnnn;

eller

&#xhhhh;

hvor nnnn er kodepunktet i decimalform , og hhhh er kodepunktet i hexadecimal form. Den x skal små bogstaver i XML-dokumenter. Den nnnn eller hhhh kan være ethvert antal cifre og kan indbefatte ledende nuller. Den hhhh kan blande store og små bogstaver, selvom store bogstaver er den sædvanlige stil.

Ikke alle webbrowsere eller e -mail -klienter, der bruges af modtagere af HTML -dokumenter eller tekstredigerere, der bruges af forfattere af HTML -dokumenter, vil kunne gengive alle HTML -tegn. Mest moderne software er i stand til at vise de fleste eller alle tegnene for brugerens sprog og vil tegne en boks eller anden klar indikator for tegn, de ikke kan gengive.

For koder fra 0 til 127, det originale 7-bit ASCII standardsæt, kan de fleste af disse tegn bruges uden en tegnreference. Koder fra 160 til 255 kan alle oprettes ved hjælp af tegnentitetsnavne . Kun få koder med højere nummer kan oprettes ved hjælp af enhedsnavne, men alle kan oprettes ved hjælp af decimaltalstegnreference.

Tegnenhedsreferencer kan også have det format, hvor navnet er en alfanumerisk streng med store og små bogstaver. For eksempel kan "λ" også kodes som i et HTML -dokument. De tegn enhed referencer , , og er foruddefineret i HTML og SGML, fordi , , og anvendes allerede til at afgrænse markup. Dette omfattede især ikke XML's (') enhed før HTML5 . For en liste over alle navngivne HTML -tegnentitetsreferencer sammen med de versioner, de blev introduceret i, se Liste over XML- og HTML -tegnentitetsreferencer . &name;&lambda;&lt;&gt;&quot;&amp;<>"&&apos;

Unødvendig brug af HTML -tegnreferencer kan reducere HTML -læsbarheden betydeligt. Hvis tegnsæt for en webside er valgt korrekt, så der normalt kun kræves HTML vandelskrav for markup afgrænsende karakterer som nævnt ovenfor, og for et par specialtegn (eller slet ingen, hvis en indfødt Unicode koder ligesom UTF-8 benyttes ). Forkert HTML-enhed, der undslipper, kan også åbne sikkerhedssårbarheder for injektionsangreb, f.eks. Scriptingtværs af websteder . Hvis HTML -attributter ikke efterlades, skal visse tegn, vigtigst af alt mellemrum , f.eks. Mellemrum og fane, undslippes ved hjælp af objekter. Andre sprog, der er relateret til HTML, har deres egne metoder til at undslippe tegn.

XML -tegnreferencer

I modsætning til traditionel HTML med sit store udvalg af karakterenhedsreferencer, er der i XML kun fem foruddefinerede karakterenhedsreferencer. Disse bruges til at undslippe tegn, der er markupfølsomme i visse sammenhænge:

  • &amp; → & ( ampersand , U+0026)
  • &lt; → <(mindre end tegn, U+003C)
  • &gt; →> (tegn større end U, 003E)
  • &quot; → "(anførselstegn, U+0022)
  • &apos; → '(apostrof, U+0027)

Alle andre karakterenhedsreferencer skal defineres, før de kan bruges. For eksempel vil brug af &eacute;(hvilket giver é, latinsk små bogstaver E med akut accent, U+00E9 i Unicode) i et XML-dokument generere en fejl, medmindre objektet allerede er defineret. XML kræver også, at de xhexadecimale numeriske referencer er med små bogstaver: for eksempel i &#xA1bstedet for &#XA1b. XHTML , som er et XML -program, understøtter HTML -enhedssæt sammen med XMLs foruddefinerede objekter.

Se også

Referencer

eksterne links