Traditionellt sett har jag haft mina filer för webben (html-filer, php-filer osv) i ISO Latin 1 men jag har mer och mer börjat gå över till UTF 8 eftersom det är bättre och fungerar helt ok på webben idag.

Problemet är följande: När jag öppna en bunt PHP-filer i BBEdit så vet inte BBEdit vilken teckenkod de använder. För kompletta html-filer är det lugnt, där kan jag använda en meta-tagg som säger vilket charset jag har. Men för styckade filer och rena php-filer går ju inte detta. Jag kan ställa in BBEdit att defaulta, förhandsvälja, en teckenkodning om den inte kan gissa rätt. Problemet är att jag om vartannat öppnar ISO Latin 1-filer och UTF 8-filer.

Jag ville slippa dubbelkolla att filerna jag öppnat verkligen öppnats med rätt teckenkodning, därför kom jag på den smarta idén att använda UTF 8 med BOM (Byte-Order Mark) på alla mina UTF 8-filer och låta BBEdit defaulta till ISO Latin 1. Eftersom det fanns en BOM i början av alla UTF 8-filer skulle BBEdit automatiskt öppna dessa med UTF-8 och allt skulle fungera. Var tanken.

Det är här PHP kommer in i biten. PHP är inte anpassat för Unicode (utan defaultar till ISO Latin 1, till mångas förtret utanför USA). Problemet uppstår när man vill använda vissa PHP-funktioner, framförallt header()-funktionen. Den funktion måste köras innan PHP-parsern har skickat en enda byte eftersom den annars inte kan sända headers. Det är här min BOM ställer till det. PHP ser BOM-tecknena i min fil och eftersom PHP inte fattar att det är Unicode så skickar PHP glatt iväg dessa tecken tillsammans med en header. Därmed fungerar inte header() och jag får den klassiska "headers already sent"-varningen.

Därmed faller min fina idé med att använda BOM för att transparent kunna använda UTF 8-filer och ISO Latin 1-filer om vartannat i BBEdit. I alla fall kommer jag inte på någon lösning, är det någon annan som har stött på detta problem och hur har ni löst det i så fall?

Målet är förstås att byta alla sajter och alla filer jag någonsin jobbar med till UTF 8, men det är inte praktiskt genomförbart än så länge.