PHP en UTF-8

Help, mijn PHP geeft vreemde tekens!
Met een zekere regelmaat komt die vraag naar voren.
De oorzaak is altijd dezelfde: daar waar transcoding tussen verschillende encodings had moeten plaatsvinden is dat niet gebeurd.
Onderliggende oorzaak is dat de programmeur niet het volledige zicht heeft op encoding.

Maar hoe los ik dat op?
Het is niet mogelijk om tekstuele data te interpreteren zonder de bijbehorende encoding (en dus karakterset) te weten.
Sla je bijvoorbeeld tekens op in UTF-8, en geef je verderop in het programma aan dat de bytes als Latin1 behandeld moeten worden, dan gaat het mis.
Het probleem van misinterpretatie beperkt zich niet tot encodings, het komt ook voor met andere datatypen. Bijvoorbeeld integers.
Als je niet weet hoeveel bits de integer is (8, 16, 32, 64, ..) en of het een signed of unsigned integer is, hoe kan je dan weten wat het getal is dat de bits bevatten?
Misinterpretatie van integers in PHP komt weinig voor. Misinterpretatie van encodings komt geregeld voor, en gelukkig is het gemakkelijk te voorkomen.
De oplossing? Sla alles op met UTF-8, en gebruik alleen PHP-functies die met VMBCS-encodings om kunnen gaan.

Waar moet ik kijken?
Data komt overal vandaan: in de browser wordt het automatisch getranscodeerd naar Unicode als je HTML-pagina dat ook is.
Je kunt externe gegevens lezen en schrijven via een databaseconnectie of een bestand, via de CLI, etc.
Data kan in PHP worden bewerkt, en PHP slaat het opnieuw op, stuurt het terug naar de browser.

Wat moet er dan allemaal in UTF-8?
Alles, of zoveel mogelijk. Want als alle data dezelfde encoding heeft, hoeft er niet getranscodeerd te worden.
Bijkomend voordeel: als een ontvangende partij geen Unicode snapt, ligt de beperking niet bij de PHP applicatie.

Bij alles moet je denken aan encoding van:
* Tekstbestanden (.php-bestanden, HTML-pagina's en databestanden)
* Databases (data en connectie)
* Browser (in- en uitvoer)
* Verwerking in PHP (instellingen, multibyte-functies)

« Lees de omschrijving en reacties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.