PHP, HTML, JavaScript
UTF-8 bez BOM


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.


Do Góry