Encoding Issues
Geplaatst door Scato Eggen op 15 January 2008
Tag(s): Webapplicaties, Artikel
Wie kent het niet: je zit uren te zwoegen op een project en dan komt er zo’n gebruiker die zonodig een é in zijn naam moet hebben. “Hé, wat is dit?” (Of: “ik heet helemaal geen Ren?e!”)
Om veel problemen te voorkomen is het goed om UTF-8 te gebruiken, maar als je dat doet moet je niet alleen letten op welke headers je stuurt. Ook je database is belangrijk. En doet jouw teksteditor wel echt wat ie zegt dat ie doet?
Download de bijbehorende bestanden:
Reacties:
Geplaatst door Felix op 11 January 2010, 16:01 uur:
Komt voor mijn gevoel niet helemaal naar boven in de Powerpoint, maar de encoding van het PHP bestand die de output van mySQL toont is ook belangrijk. Je kan alles UTF-8 hebben (DB connectie, Tabel encoding, text encoding), maar als je PHP bestand b.v.b. met ANSI encoding is opgeslagen krijg je alsnog garbage. Dus ook je PHP bestand opslaan met UTF-8 encoding
Geplaatst door Scato op 11 January 2010, 16:01 uur:
Wat wel naar boven komt in de powerpoint is het nadeel van je sourcecode opslaan in UTF-8: de Byte Order Mark die de boel breekt. Overigens is er niets mis met het doorgeven van UTF-8 encoded bytes door middel van een ANSI encoded PHP bestand. Alleen de string literals zullen verkeerd weergegeven worden.
Geplaatst door Erik op 11 January 2010, 16:01 uur:
Misschien begrijp ik het niet helemaal, maar die breekt toch niets, wat er gebeurt is toch expected behaviour? Wat ik bedoel te zeggen is dat developers zich er bewust van zouden moeten zijn dat ze hun bestanden in UTF-8 opslaan en dat dit dus effect heeft op de PHP parser (die blijkbaar de UTF-8 header automatisch toevoegt). Daarnaast hebben de meeste editors die ik ben tegengekomen UTF-8 als standaard encoding voor bestanden. Maar tis wel een goeie om dit te checken bij je collega’s En er een bedrijfsbrede afspraak over te maken. Goed onderwerp trouwens!
Geplaatst door Reinder op 11 January 2010, 16:01 uur:
Het probleem zit hem erin dat deze BOM voor de eerste <?php-tag van een script staat. De PHP-parser zal met default instellingen deze BOM direct naar de browser sturen. Indien later in het script bijvoorbeeld een redirect met een header("location.. wordt gedaan ontstaat er een foutmelding dat er al output verstuurd is en dat headers niet meer verstuurd kunnen worden. Sterker nog, zelfs een header die UTF-8 encoding wil forceren zal om dezelfde reden tot een foutmelding leiden.
