Ontrafel het mysterie van CSS @charset. Leer de cruciale rol ervan in karaktercodering voor stylesheets, wat zorgt voor een wereldwijde tekstweergave en 'mojibake' voorkomt in diverse talen en schriften wereldwijd. Essentieel voor elke webontwikkelaar.
CSS @charset: De Onzichtbare Architect van Wereldwijde Tekstweergave
In de complexe wereld van webontwikkeling, waar elke pixel en elk teken perfect moet worden weergegeven op een veelheid aan apparaten en in verschillende culturen, zijn er vaak subtiele maar cruciale details die onopgemerkt blijven totdat er iets misgaat. Eén zo'n detail, fundamenteel voor een robuuste internationale aanwezigheid op het web, is karaktercodering. Voor CSS specifiek, omvat dit de @charset-regel. Hoewel het misschien onbelangrijk lijkt, is het begrijpen en correct implementeren van @charset van het grootste belang om ervoor te zorgen dat uw stylesheets dezelfde taal spreken als uw content, en tekst foutloos wordt weergegeven voor een wereldwijd publiek.
Deze uitgebreide gids gaat diep in op de betekenis van @charset, en verkent de rol ervan binnen het bredere landschap van karaktercodering op het web. We zullen ontdekken waarom het belangrijk is, hoe het interacteert met andere coderingdeclaraties, de best practices voor het gebruik ervan, en veelvoorkomende valkuilen die u moet vermijden, alles door de lens van het creëren van een werkelijk wereldwijde webervaring.
Karaktercodering Begrijpen: De Basis
Voordat we @charset volledig kunnen waarderen, moeten we eerst het concept van karaktercodering begrijpen. In de kern is karaktercodering een systeem dat unieke numerieke waarden toekent aan tekens – letters, cijfers, symbolen en zelfs emoji's – waardoor ze digitaal kunnen worden opgeslagen, verzonden en weergegeven. Zonder een consistente codering is een reeks bytes slechts data; met een codering veranderen die bytes in betekenisvolle tekst.
De Evolutie van Tekensets
- ASCII (American Standard Code for Information Interchange): De vroegste en meest fundamentele coderingsstandaard. ASCII brengt 128 tekens (0-127) in kaart, voornamelijk letters uit het Engelse alfabet, cijfers en basisleestekens. De eenvoud ervan was revolutionair, maar de beperkte reikwijdte werd al snel een barrière toen computers wereldwijd werden gebruikt.
- ISO-8859-1 (Latin-1): Een uitbreiding van ASCII, die nog eens 128 tekens (128-255) toevoegde om West-Europese talen te ondersteunen, inclusief tekens met diakritische tekens (accenten, umlauts) zoals é, ü, ç. Hoewel dit een belangrijke stap was, schoot het nog steeds tekort voor talen die volledig andere schriften gebruiken, zoals Cyrillisch, Arabisch of Oost-Aziatische tekens.
- De Noodzaak van Universele Codering: Toen het internet een wereldwijd fenomeen werd, werden de beperkingen van single-byte coderingen pijnlijk duidelijk. Websites die content in meerdere talen aanboden of gericht waren op diverse taalgemeenschappen, stuitten op onoverkomelijke uitdagingen. Er was een universele codering nodig die elk teken in elke menselijke taal kon vertegenwoordigen, en zelfs veel niet-menselijke symbolen.
UTF-8: De Wereldwijde Standaard
Dat is waar UTF-8 (Unicode Transformation Format - 8-bit) om de hoek komt kijken, de dominante karaktercodering voor het web vandaag de dag, en met goede reden. UTF-8 is een codering met variabele breedte die elk teken in de Unicode-standaard kan representeren. Unicode is een enorme tekenset die tot doel heeft alle tekens van alle schriftsystemen ter wereld te omvatten. De variabele breedte van UTF-8 betekent:
- Veelvoorkomende ASCII-tekens worden vertegenwoordigd door één enkele byte, wat het achterwaarts compatibel en efficiënt maakt voor Engelse tekst.
- Tekens uit andere schriften (bijv. Grieks, Cyrillisch, Arabisch, Chinees, Japans, Koreaans, Hindi, Thai) worden vertegenwoordigd door twee, drie of vier bytes.
- Het is zeer efficiënt voor content met gemengde schriften, omdat het geen ruimte verspilt aan single-byte tekens.
- Het is robuust en wordt breed ondersteund door browsers, besturingssystemen en programmeertalen.
De overweldigende aanbeveling voor alle nieuwe webcontent is om UTF-8 te gebruiken. Het vereenvoudigt de ontwikkeling, zorgt voor maximale compatibiliteit en is cruciaal voor een wereldwijd bereik.
De CSS @charset Regel: Een Diepgaande Analyse
Met een goed begrip van karaktercodering kunnen we ons nu richten op de CSS @charset-regel. Deze regel dient één enkel, essentieel doel: het specificeren van de karaktercodering van de stylesheet zelf.
Syntaxis en Plaatsing
De syntaxis voor @charset is eenvoudig:
@charset "UTF-8";
Of, voor een oudere, minder aanbevolen codering:
@charset "ISO-8859-1";
Er zijn cruciale regels met betrekking tot de plaatsing:
- Het MOET het allereerste element in de stylesheet zijn. Geen commentaar, geen witruimte (behalve een optionele byte-order mark), en geen andere CSS-regels of at-rules mogen eraan voorafgaan.
- Als het niet het eerste element is, zal de CSS-parser het simpelweg negeren, wat kan leiden tot mogelijke coderingsproblemen.
- Het is alleen van toepassing op de stylesheet waarin het is gedeclareerd. Als u meerdere CSS-bestanden hebt, heeft elk bestand zijn eigen
@charset-regel nodig als de codering kan afwijken van de standaard of afgeleide codering.
Waarom is het Nodig?
Stel u voor dat uw CSS-bestand aangepaste lettertypen bevat met specifieke tekenbereiken, of content-eigenschappen gebruikt met speciale symbolen, of misschien klassen definieert met namen die niet-ASCII-tekens bevatten (hoewel dit over het algemeen wordt afgeraden voor klassennamen, is het mogelijk). Als de browser de bytes van uw CSS-bestand interpreteert met een andere codering dan waarmee het is opgeslagen, zullen die tekens verschijnen als verminkte tekst, bekend als "mojibake" (乱れ文字 - Japans voor "door elkaar gegooide tekens").
De @charset-regel vertelt de browser expliciet: "Hé, dit CSS-bestand is geschreven met deze specifieke karaktercodering. Interpreteer de bytes alstublieft dienovereenkomstig." Deze expliciete declaratie helpt misinterpretaties te voorkomen, vooral wanneer er conflicten of onduidelijkheden zijn in andere coderingsdeclaraties.
De Hiërarchie van Coderingsdeclaraties
Het is belangrijk te begrijpen dat de @charset-regel niet de enige manier is waarop een browser de codering van een CSS-bestand bepaalt. Er is een specifieke hiërarchie van voorrang die browsers volgen:
-
HTTP
Content-TypeHeader: Dit is de meest gezaghebbende en geprefereerde methode. Wanneer een webserver een CSS-bestand levert, kan het eenHTTP Content-Type-header met eencharset-parameter meesturen, bijvoorbeeld:Content-Type: text/css; charset=UTF-8. Als deze header aanwezig is, zal de browser deze boven alles respecteren.Deze methode is krachtig omdat deze door de server wordt ingesteld, wat zorgt voor consistentie nog voordat de browser de inhoud van het bestand begint te parsen. Het wordt vaak geconfigureerd op serverniveau (bijv. Apache, Nginx) of binnen server-side scripting (bijv. PHP, Node.js).
-
Byte Order Mark (BOM): Een BOM is een speciale reeks bytes aan het begin van een bestand die de codering aangeeft (specifiek voor UTF-coderingen zoals UTF-8, UTF-16). Hoewel UTF-8 BOM's technisch optioneel zijn en soms problemen kunnen veroorzaken (bijv. extra witruimte in oudere browsers/servers), vertelt de aanwezigheid ervan de browser: "Dit bestand is UTF-8-gecodeerd." Als er een BOM aanwezig is, heeft deze voorrang op de
@charset-regel.Voor UTF-8 is de BOM-sequentie
EF BB BF. Veel teksteditors voegen automatisch een BOM toe bij het opslaan als "UTF-8 met BOM." Het wordt over het algemeen aanbevolen om UTF-8-bestanden zonder BOM op te slaan voor webcontent, om mogelijke weergavefouten of parserproblemen te voorkomen. -
@charsetRegel: Als noch een HTTPContent-Type-header, noch een BOM aanwezig is, zal de browser vervolgens zoeken naar de@charset-regel als de eerste verklaring in het CSS-bestand. Als deze wordt gevonden, zal de browser die gedeclareerde codering gebruiken. -
Codering van het Hoofddocument: Als geen van de bovenstaande is gespecificeerd, zal de browser doorgaans terugvallen op de codering van het HTML-document dat naar het CSS-bestand linkt. Bijvoorbeeld, als uw HTML-document
<meta charset="UTF-8">heeft en er geen andere coderingsaanwijzingen voor de CSS aanwezig zijn, zal de browser aannemen dat de CSS ook UTF-8 is. - Standaardcodering: Als laatste redmiddel, als er geen expliciete coderingsinformatie beschikbaar is uit welke bron dan ook, zal de browser zijn standaardcodering toepassen (die varieert maar vaak UTF-8 is in moderne browsers, of een landspecifieke codering in oudere). Dit is het meest riskante scenario en moet te allen tijde worden vermeden, omdat het de meest voorkomende oorzaak van mojibake is.
Deze hiërarchie verklaart waarom u soms een CSS-bestand correct ziet weergegeven, zelfs zonder een expliciete @charset-regel, met name als uw server consequent UTF-8-headers verstuurt of uw HTML-document UTF-8 declareert.
Wanneer en Waarom @charset Gebruiken
Gezien de hiërarchie zou men zich kunnen afvragen: is @charset altijd nodig? Het antwoord is genuanceerd, maar over het algemeen is het een goede gewoonte, vooral in bepaalde scenario's:
-
Als Sterke Terugvaloptie: Zelfs als uw server is geconfigureerd om
UTF-8-headers te verzenden, fungeert het opnemen van@charset "UTF-8";bovenaan uw CSS-bestand als een expliciete, interne declaratie. Dit is met name handig in ontwikkelomgevingen waar serverconfiguraties inconsistent kunnen zijn, of wanneer bestanden lokaal zonder server worden bekeken. - Voor Consistentie en Duidelijkheid: Het maakt de codering van het CSS-bestand expliciet voor iedereen die het bestand opent, of het nu een ontwikkelaar, een contentmanager of een lokalisatiespecialist is. Deze duidelijkheid vermindert dubbelzinnigheid en potentiële fouten tijdens samenwerking, vooral in internationale teams.
-
Bij Migratie of Werken met Verouderde Systemen: Als u werkt met oudere CSS-bestanden die mogelijk zijn gemaakt met verschillende coderingen (bijv. ISO-8859-1 of Windows-1252), en u deze coderingen tijdelijk of tijdens een migratiefase moet behouden, wordt
@charsetessentieel om die bestanden correct te interpreteren. -
Bij Gebruik van Niet-ASCII-tekens in CSS: Hoewel over het algemeen afgeraden voor leesbaarheid en onderhoudbaarheid, staat CSS toe dat identifiers (zoals klassenamen of lettertypenamen) niet-ASCII-tekens bevatten als ze worden ge-escaped of als de codering van het bestand ze correct verwerkt. Bijvoorbeeld, als u een lettertypefamilie definieert als
font-family: "Libre Baskerville Cyrillic";of specifieke tekensymbolen gebruikt incontent-eigenschappen (content: '€';voor het Euro-symbool, of directcontent: '€';), dan wordt het essentieel om ervoor te zorgen dat de codering van het CSS-bestand correct is gedeclareerd.@charset "UTF-8"; .currency-symbol::before { content: "€"; /* UTF-8 Euro-symbool */ } .multilingual-text::after { content: "안녕하세요"; /* Koreaanse tekens */ }Zonder de juiste
@charset(of andere sterke coderingsaanwijzingen) kunnen deze tekens worden weergegeven als vraagtekens of andere onjuiste symbolen. -
Externe Stylesheets op Verschillende Domeinen: Hoewel minder gebruikelijk voor typische assets, als u linkt naar CSS-bestanden die op volledig verschillende domeinen worden gehost, kunnen hun serverconfiguraties aanzienlijk verschillen. Een expliciete
@charsetkan een extra laag van robuustheid bieden tegen onvoorziene coderingsmismatches.
In wezen, hoewel UTF-8 de universeel aanbevolen codering is en serverheaders het meest robuuste mechanisme zijn, dient @charset "UTF-8"; als een uitstekende waarborg en een duidelijke intentieverklaring binnen uw stylesheet, wat de overdraagbaarheid verbetert en de kans op coderingsgerelateerde problemen voor een wereldwijd publiek verkleint.
Best Practices voor Wereldwijde Karaktercodering
Om een naadloze, wereldwijd toegankelijke webervaring te garanderen, is het cruciaal om een consistente coderingsstrategie te hanteren voor al uw webassets. Hier zijn de best practices, waarbij @charset zijn rol speelt:
1. Standaardiseer Overal op UTF-8
Dit is de gouden regel. Maak UTF-8 uw standaard en universele codering voor:
- Alle HTML-documenten: Declareer expliciet
<meta charset="UTF-8">binnen de<head>-sectie van uw HTML. Dit moet een van de allereerste meta-tags zijn. - Alle CSS Stylesheets: Sla al uw
.css-bestanden op als UTF-8. Voeg bovendien@charset "UTF-8";toe als de allereerste regel van elk CSS-bestand. - Alle JavaScript-bestanden: Sla uw
.js-bestanden op als UTF-8. Hoewel JavaScript geen equivalent heeft van@charset, is consistentie essentieel. - Serverconfiguratie: Configureer uw webserver (Apache, Nginx, IIS, etc.) om alle op tekst gebaseerde content te serveren met de
Content-Type: text/html; charset=UTF-8ofContent-Type: text/css; charset=UTF-8header. Dit is de meest robuuste en geprefereerde methode. - Databasecodering: Zorg ervoor dat uw databases (bijv. MySQL, PostgreSQL) zijn geconfigureerd om UTF-8 te gebruiken (specifiek
utf8mb4voor MySQL om alle Unicode-tekens, inclusief emoji's, volledig te ondersteunen). - Ontwikkelomgeving: Configureer uw teksteditor, IDE en versiebeheersysteem om standaard UTF-8 te gebruiken. Dit voorkomt het per ongeluk opslaan in een andere codering.
Door consequent UTF-8 te gebruiken in uw hele stack, vermindert u de kans op coderingsgerelateerde problemen drastisch, en zorgt u ervoor dat tekst in elke taal, uit elk schrift, wordt weergegeven zoals bedoeld voor gebruikers wereldwijd.
2. Sla Bestanden Altijd op als UTF-8 (Zonder BOM)
De meeste moderne teksteditors (zoals VS Code, Sublime Text, Atom, Notepad++) stellen u in staat de codering te specificeren bij het opslaan. Kies altijd "UTF-8" of "UTF-8 zonder BOM." Zoals vermeld, hoewel een BOM de codering signaleert, kan het soms kleine parsingproblemen of onzichtbare tekens veroorzaken, dus het kan over het algemeen het beste worden vermeden voor webcontent.
3. Valideer en Test
- Browser Developer Tools: Gebruik de developer tools van uw browser om de HTTP-headers voor uw CSS-bestanden te inspecteren. Bevestig dat de
Content-Type-headercharset=UTF-8bevat. - Cross-Browser en Cross-Device Testen: Test uw website op verschillende browsers (Chrome, Firefox, Safari, Edge) en besturingssystemen, inclusief mobiele apparaten, om eventuele weergave-inconsistenties op te sporen.
- Testen van Geïnternationaliseerde Content: Als uw site meerdere talen ondersteunt, test dan met content in verschillende schriften (bijv. Arabisch, Russisch, Chinees, Devanagari) om ervoor te zorgen dat alle tekens correct worden weergegeven. Besteed speciale aandacht aan tekens die mogelijk buiten het basis meertalige vlak (BMP) vallen, zoals bepaalde emoji's, die vier bytes vereisen in UTF-8.
4. Overweeg Terugvallettertypen voor Internationale Tekens
Hoewel karaktercodering ervoor zorgt dat de browser de bytes correct interpreteert, hangt de weergave van die tekens af van het feit of het systeem van de gebruiker lettertypen heeft die de benodigde glyfen bevatten. Als een aangepast weblettertype een specifiek teken niet ondersteunt, zal de browser terugvallen op een systeemlettertype. Zorg ervoor dat uw font stacks robuust zijn en generieke lettertypefamilies (zoals sans-serif, serif) bevatten als terugvalopties om tekens te verwerken die niet aanwezig zijn in uw primaire weblettertypen.
Veelvoorkomende Valkuilen en Probleemoplossing
Ondanks best practices kunnen er af en toe coderingsproblemen optreden. Hier leest u hoe u veelvoorkomende problemen met betrekking tot @charset en karaktercodering kunt identificeren en oplossen:
1. Onjuiste Plaatsing van @charset
De meest voorkomende fout is het plaatsen van @charset ergens anders dan op de allereerste regel. Als u commentaar, lege regels of andere regels ervoor hebt, wordt het genegeerd.
@charset "UTF-8"; /* Dit is correct */
/* Mijn Stylesheet */
@charset "UTF-8"; /* Onjuist: witruimte ervoor */
/* Mijn Stylesheet */
@import url("reset.css");
@charset "UTF-8"; /* Onjuist: @import ervoor */
Oplossing: Zorg er altijd voor dat @charset de absoluut eerste declaratie in uw CSS-bestand is.
2. Mismatch Tussen Bestands- en Gedeclareerde Codering
Als uw CSS-bestand is opgeslagen als, bijvoorbeeld, ISO-8859-1, maar u declareert @charset "UTF-8";, zullen tekens buiten het ASCII-bereik waarschijnlijk onjuist worden weergegeven. Hetzelfde geldt als het bestand UTF-8 is maar als een oudere codering wordt gedeclareerd.
Oplossing: Sla uw bestand altijd op in de codering die u declareert (bij voorkeur UTF-8) en zorg voor consistentie met serverheaders en HTML-meta-tags. Gebruik de opties "Opslaan als..." of "Codering wijzigen" van een teksteditor om bestanden indien nodig te converteren.
3. Serverconfiguratie Overschrijft @charset
Als uw server een HTTP Content-Type-header verzendt die een andere codering specificeert dan uw @charset-regel, zal de header van de server winnen. Dit kan leiden tot onverwachte mojibake, zelfs als uw @charset correct is.
Oplossing: Configureer uw webserver om altijd Content-Type: text/css; charset=UTF-8 te verzenden voor alle CSS-bestanden. Dit is de meest betrouwbare aanpak.
4. Problemen met UTF-8 BOM
Hoewel minder gebruikelijk met moderne tools, kan een ongewenste UTF-8 BOM soms de parsing verstoren, vooral in oudere browserversies of serverconfiguraties, wat af en toe leidt tot onzichtbare tekens of lay-outverschuivingen aan het begin van het bestand.
Oplossing: Sla al uw UTF-8-bestanden op zonder BOM. Veel teksteditors bieden deze optie. Als u problemen ondervindt, controleer dan of er een BOM aanwezig is met een hex-editor of een gespecialiseerde teksteditor die verborgen tekens kan weergeven.
5. Escapen van Tekens voor Speciale Karakters in Selectors/Content
Als u niet-ASCII-tekens direct moet gebruiken binnen CSS-identifiers (zoals klassenamen, hoewel niet aanbevolen voor wereldwijde projecten) of stringwaarden (zoals content voor pseudo-elementen), kunt u ook CSS-escapes gebruiken (\ gevolgd door het Unicode-codepunt). Bijvoorbeeld, content: "\20AC"; voor het Euro-symbool. Deze aanpak garandeert compatibiliteit ongeacht de codering van het bestand, maar het maakt de stylesheet minder leesbaar voor mensen.
.euro-icon::before {
content: "\20AC"; /* Unicode-escape voor het Euro-teken */
}
.korean-text::after {
content: "\C548\B155\D558\C138\C694"; /* Unicode-escapes voor '안녕하세요' */
}
Het gebruik van @charset "UTF-8"; en het direct insluiten van de tekens heeft over het algemeen de voorkeur voor leesbaarheid wanneer het bestand correct is opgeslagen als UTF-8. Escapen is een robuust alternatief voor specifieke scenario's of wanneer absolute zekerheid vereist is.
De Wereldwijde Impact van Correcte Codering
Het schijnbaar technische detail van karaktercodering, en bij uitbreiding, de @charset-regel, heeft diepgaande gevolgen voor het wereldwijde bereik en de toegankelijkheid van uw webcontent:
- Wereldwijd "Mojibake" Voorkomen: Niets verstoort de gebruikerservaring zozeer als verminkte tekst. Of het nu een menu-item, een gestileerd stuk content of een knoplabel is, onjuiste codering kan tekst onleesbaar maken, wat gebruikers die andere talen spreken of niet-Latijnse schriften gebruiken onmiddellijk vervreemdt. Het garanderen van de juiste codering voorkomt deze "tekstcorruptie" voor gebruikers overal ter wereld.
- Echte Internationalisatie (i18n) Mogelijk Maken: Voor websites die zijn ontworpen om een wereldwijd publiek te bedienen, is robuuste internationalisatie niet onderhandelbaar. Dit omvat ondersteuning voor meerdere talen, verschillende datum-/tijdnotaties, valutasymbolen en tekstrichtingen (links-naar-rechts, rechts-naar-links). Een juiste karaktercodering is de basis waarop al deze internationalisatie-inspanningen zijn gebouwd. Zonder dit zal zelfs het meest geavanceerde vertaalsysteem niet correct worden weergegeven.
- Merkconsistentie Behouden Tussen Regio's: De visuele identiteit van uw merk strekt zich uit tot hoe de tekst ervan wordt weergegeven. Als een merknaam of slogan unieke tekens bevat of in een niet-Latijns schrift wordt gepresenteerd, zorgt een correcte codering ervoor dat dit cruciale aspect van uw merk consistent en professioneel wordt weergegeven, ongeacht de locatie of systeeminstellingen van de gebruiker.
- SEO Verbeteren voor Wereldwijde Zoekopdrachten: Zoekmachines vertrouwen sterk op correct geïnterpreteerde tekst om content te indexeren. Als uw tekens onleesbaar zijn door coderingsproblemen, kunnen zoekmachines moeite hebben om uw content goed te begrijpen en te categoriseren, wat mogelijk uw wereldwijde zoekmachinerankings en vindbaarheid schaadt.
- Toegankelijkheid Verbeteren: Voor gebruikers die afhankelijk zijn van hulptechnologieën (schermlezers, vergrootglazen), is een correcte tekstweergave van het grootste belang. Onleesbare tekst is niet alleen onleesbaar voor menselijke ogen, maar ook voor toegankelijkheidstools, waardoor uw content ontoegankelijk wordt voor een aanzienlijk deel van de wereldwijde gebruikersbasis.
In een wereld waar het internet geografische grenzen overstijgt, staat het negeren van karaktercodering gelijk aan het opwerpen van taalbarrières waar die niet zouden moeten bestaan. De bescheiden @charset-regel, wanneer correct begrepen en geïmplementeerd, draagt aanzienlijk bij aan het slechten van deze barrières en het bevorderen van een internet dat echt wereldwijd en inclusief is.
Conclusie: Een Kleine Regel met Grote Gevolgen
De CSS @charset-regel, hoewel schijnbaar een klein detail in het uitgestrekte landschap van webontwikkeling, speelt een onevenredig grote rol in het garanderen van de wereldwijde compatibiliteit en correcte weergave van uw stylesheets. Het is een fundamenteel stukje van de karaktercoderingspuzzel, dat samenwerkt met HTTP-headers, BOM's en HTML-meta-tags om de taal van uw bytes aan de browser te communiceren.
Door UTF-8 te omarmen als uw universele coderingsstandaard voor al uw webassets – van HTML en CSS tot JavaScript en serverconfiguraties – en door consequent @charset "UTF-8"; toe te passen aan het allereerste begin van uw stylesheets, legt u een robuuste basis voor een werkelijk internationale aanwezigheid op het web. Deze zorgvuldige aandacht voor detail voorkomt frustrerende "mojibake" en zorgt ervoor dat uw content, ontwerp en merkidentiteit vlekkeloos worden gepresenteerd aan elke gebruiker, overal ter wereld, ongeacht hun moedertaal of schrift.
Terwijl u blijft bouwen voor het web, onthoud dat elk teken telt. Een consistente en duidelijke karaktercoderingsstrategie, aangevoerd door de nederige @charset-regel in uw CSS, is niet alleen een technische formaliteit; het is een toewijding aan een werkelijk wereldwijd, toegankelijk en gebruiksvriendelijk internet.