Rozpoczynając pracę nad nowym projektem, zawsze na samym początku należy określić jakiego kodowania znaków będziemy używać. Obecnie aby zagwarantować dużą kompatybilność przyjęło się stosować kodowanie UTF-8. Na pierwszy rzut oka wszystko wydaję się bardzo proste jednakże wcale takie nie jest, ponieważ wybierając UTF-8 często zapominamy o tym, że trzeba zaznaczyć, aby do pliku nie był dodawany nagłówek(BOM), ponieważ gdy o tym zapomnimy i wyświetlimy naszą stronę to na ekranie ukarze się oprócz treści np. tajemniczy komunikat (Warning):
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at ...\www\index.php:1) in ...\www\index.php on line 2
Większość początkujących programistów to zignoruje i pewnie wyłączy wyświetlanie błędów poprzez dodanie @ przed sessionstart();
, lecz każdy bardziej doświadczony będzie wiedział, że po prostu w naszym pliku został na początku zapisany nagłówek informujący o kodowaniu czyli nasze BOM, jednakże nie jest on widoczny w większości edytorów dlatego też programiści o tym zapominają, a to sprawia iż wywołanie np. funkcji sessionstart()
, header()
, include()
, require()
zakończy się wyświetleniem komunikatu o błędzie, którego nigdy nie należy ignorować!
Co można z tym zrobić?
Kiedy już do naszego skryptu wkradł się BOM, należy go oczywiście niezwłocznie z niego usunąć, poprzez konwersje naszego pliku na format UTF-8 bez BOM.
W internecie można znaleźć wiele edytorów kodu, które cieszą się ogromną popularnością i są to przeważnie edytory typu IDE, które umożliwiają usuwanie naszego BOM z pliku, jednakże osobiście polecamy dla osób pracujących na platformie Windows notepad++
, który również doskonale sobie z tym radzi.
Jak usunąć BOM z pliku w programie notepad++
Otwieramy nasz plik w notepad++
, a następnie przechodzimy do menu
Format gdzie wybieramy opcje Konwertuj na format UTF-8 bez BOM
i zapisujemy nasz plik.
Jeśli jednak nie posiadamy odpowiedniego programu można wykorzystać do tego funkcję napisaną w języku php
:
$_file = ''; # nazwa pliku function removeBOM($page){ if(substr($page,0,3)==chr(hexdec('EF')).chr(hexdec('BB')).chr(hexdec('BF'))){ return substr($page,3); }else{ return $page; } } $file = file_get_contents($_file); if (!file_put_contents($_file,removeBOM($file))) { echo "Nie udało się zapisać do pliku"; }
Należy jednak pamiętać, że zaleca się usuwać BOM, za pomocą odpowiedniego edytora, a druga metoda została przedstawiona jako ciekawostka.