UTF-8 fájlok és a BOM
A probléma leírása
A Jegyzettömb (Notepad) programot használtam egy PHP fájl szerkesztésére és a tárhelyre visszamásolás után valami furcsa dolog történt. (pl: Cannot modify header information PHP hibát kapok)
A probléma oka
Bizonyos szövegszerkesztő programok -, mint például a Jegyzettömb - automatikusan tesznek két speciális, szövegszerkesztőben nem látható jelölő karaktert (ezt hívják BOM-nak) az UTF-8 kódolással mentett szövegfájlok elejére. Ezek a karakterek megzavarják a PHP-t futtató értelmezőt és bizonyos esetekben hibás működést okozhatnak.
Sajnos csomó program magától használja a BOM-ot (Byte Order Mark), rákérdezés vagy egyéb erre utaló jel nélkül berakja a fájl elejére, amit sok szerver nem kedvel. Nálunk számtalan hiba adódott abból, hogy általános szövegszerkesztő programokkal (Windows-on) belenyúlt valaki a fájl tartalmába, és nincs lehetőség kiválasztani a mentéskor olyan verziót, hogy BOM ne kerüljön a fájlba.
Hibajelenség például a már említett üzenet, vagy felesleges karakterek a kész HTML oldalban. Pl. Include-ok a beidézett fájlok elejéről bemásolhatják a beidézet PHP fájl legelején szereplő BOM-ot egy másik fájl tetszőleges helyére, így problémák elég széles skálán jelentkezhetnek. Nálunk sok felesleges sortörést vettünk észre, amik számos esetben erre a felesleges BOM hibára voltak visszavezethetőek.
Megoldások
- A legegyszerűbb az, hogy a PHP kódot tartalmazó fájlokat másik szövegszerkesztő programmal kell szerkeszteni és azokban elmenteni (pl. Notepad++ - http://notepad-plus-plus.org/ ). Ezek után helyesen fognak működni a feltöltést követően.
- A másik megoldás, ami csak akkor működik, ha nem tartalmaz ékezeteket az adott fájl (pl. egy konfigurációs fájl valamilyen PHP-s CMS-hez/blogmotorhoz) az, hogy ANSI kódolással kell elmenteni a Jegyzettömbben.
- Sok hexa editor meg tudja mutatni a fájlok tartalmát, a leggyakoribb szövegszerkesztők viszont elrejtik a BOM-ot. Mi egy végső megoldást találtunk: végigmenni az összes fájlon és ellenőrizni a BOM-ok jelenlétét. Erre egész jól használható eszköz ez a minimális programocska: http://www.tothgabor.hu/programozas/utf-8-bom-byte-order-mark-remover/
Kapcsolódó bejegyzések
Hibaüzenetek
- "Forbidden - You don't have permission to access / on this server" hibaüzenetet kapok
- "Internal Server Error" hibaüzenetet kapok
- "Zero Sized Reply" hibaüzenetet kapok
- A PHP nem fut, mit csináljak?
- Cannot modify header information PHP hibát kapok
- Hogyan tudok egyedi hibaoldalt készíteni? (pl. 404-es hiba, az oldal nem található)
- UTF-8 fájlok és a BOM
- Üres oldal jön be a honlapom helyett
Webtárhely
- "Forbidden - You don't have permission to access / on this server" hibaüzenetet kapok
- "Internal Server Error" hibaüzenetet kapok
- "Zero Sized Reply" hibaüzenetet kapok
- Cannot modify header information PHP hibát kapok
- Csomagot szeretnék váltani, mit kell tennem?
- Egy meglévő tárhelycsomagot szeretnék plusz domain csomaggá alakítani, hogyan csináljam?
- FTP felhasználók
- Fájlméret korlátok
- Használhatok-e Flash animációkat (.swf)?
- Használhatok-e a honlapomon Javascript-et?
- Hogyan tudok aldomain-eket létrehozni? (pl. blog.dgn.hu, forum.dgn.hu stb.)
- Hogyan tudok egyedi hibaoldalt készíteni? (pl. 404-es hiba, az oldal nem található)
- Hogyan tudok file-okat feltölteni a tárhelyemre?
- Hogyan tudok programokat automatikusan, időzítetten futtatni? (Cron)
- Hol tudom elérni a tárhely tartalmát, amíg a domain bejegyzése befejeződik?
- Htaccess tippek-trükkök
- Jelszóval szeretnék védeni egy könyvtárat, hogyan tehetem meg?
- Keresőbarát webcím (Search Engine Friendly URL)
- Le szeretném tiltani egy könyvtár listázását
- Mutathat-e egy tárhelyre több domain?
- PHP rendszerváltozók alapértelmezett értékei
- SSL titkosítás (https) használható-e?
- Telepített PHP modulok listája
- UTF-8 fájlok és a BOM
- iWeb szoftverrel szeretném létrehozni honlapom. Tudok vele FTP-n keresztül csatlakozni tárhelyemhez?
- Üres oldal jön be a honlapom helyett