UTF FIX BOM

Některé editory vkládají na začátek souboru tzv. BOM (Byte Order Mark). Kvůli BOM může zařvat zaslání hlavičky a přesto, že jste si jisti, že nikde ve skriptu nic dříve na výstup nejde před zasláním header(), přece tam někdě něco neviditelného je. A jak se toho zbavit?


Zdrojový kód ke stažení bom.php.txt

BOM (Byte Order Mark) se používá k určení o jaké UTF kódování se v souboru jedná, zda je použito UTF-8, UTF-16, UTF-32 a další.

V praxi obvykle při psaní skriptů BOM potřebovat nebudeme, potřeboval jsem to snad jen jednou a to pro Fussion Chart grafy definované xml souborem (ten musel začínat BOM znaky).

Otestovat jeslti v souboru je BOM můžeme snadno:

  1. $bom = fread($file, 3);
  2. if ($bom == ( chr(0xEF) . chr(0xBB) . chr(0xBF) )) {
  3. je tam!

V příkladech ke stažení pak najdete skript, který když umístíte nad všechny soubory, které chcete zkontrolovat a spustíte ho, tak projde rekurzivně jeden soubor za druhým (včetně podadresářů) a když zjistí, že je v souboru BOM, tak soubor uloží znovu, ale bez BOM.

Názvy souborů, které obsahovaly BOM vypíše na obrazovku. Pozor pokud je opravdu nějaký důvod k BOM tak tato operace je nevratně odstraní!