Jörg Kruse Internet-
Programmierungen

BOM (Byte Order Mark)

In Textdateien, die Unicode-Zeichen enthalten, befindet sich am Anfang oft eine sogenannte Byte Order Mark, abgekürzt BOM, welche die Byte-Reihenfolge markiert. Für die Unicode-Codierungen UTF-16 oder UTF-32 ist dieses zwingend erforderlich. Da bei UTF-8 nur eine Reihenfolge möglich ist, ist das BOM dort optional. Editoren unter Windows verwenden in der Regel das BOM auch bei einer Speicherung in der Codierung UTF-8, Editoren unter Linux dagegen nicht.

Das BOM ist nicht sichtbar, wenn eine Datei mit der Codierung UTF-8 geöffnet wird. In einem Hex-Editor kann das BOM als Byte-Sequenz EFBBBF identifiziert werden. Wird die Datei in einem normalen Editor mit der Codierung ISO 8859-1 (latin-1) geöffnet, werden am Anfang anstelle dieser Byte-Sequenz folgende Zeichen ausgegeben:




PHP und BOM

Da die Scriptsprache PHP ein BOM nicht als solches interpretiert, gibt es die Sequenz als Zeichen „“ aus. Das kann z.B. dann zu einem Problem führen, wenn mit der Funktion header() HTTP-Header gesetzt werden, was vor einer ersten Ausgabe von Text oder HTML-Code erfolgen muss. Wenn PHP-Dateien Umlaute enthalten und deswegen in einer UTF-8-Codierung gespeichert werden müssen, sollte die Speicherung unter Windows nicht mit Notepad, sondern mit Notepad++ erfolgen. Dort ist eine Speicherung ohne BOM möglich (unter Kodierung „Konvertiere zu UTF-8 ohne BOM“ auswählen).