Konsolen-Tipps

Terminal-Geflüster für die Linux-Konsole

Webentwicklung und PHP: Dateien ohne Byte-Order-Mark


Wer im Zuge von Webentwicklungen Text- oder Script-Dateien zwischen unterschiedlichen Betriebssystemen und Texteditoren austauscht, wird oft auf die ominöse Zeichenkette „“ am Anfang der Dateien stoßen. Was zunächst wie ein Fehler aussieht, hat eine einfache Erklärung: Es handelt sich um das Byte-Order-Mark (BOM) von UTF-8/16/32-Dateien, das bei einer missglückten Konvertierung in den ISO-Zeichensatz 8859-1 oder 8859-15 zurückbleibt.

Byte-Order-Mark (BOM) entfernen: In der Shell können Sie mit grep Textdateien mit BOM finden und dann bei Bedarf mit sed in allen Dateien eines bestimmten Typs in einem Verzeichnis löschen.
Byte-Order-Mark (BOM) entfernen: In der Shell können Sie mit grep Textdateien mit BOM finden und dann bei Bedarf mit sed in allen Dateien eines bestimmten Typs in einem Verzeichnis löschen.

Die Aufgabe von Byte-Order-Marks ist die Angabe der Byte-Reihenfolge, damit unterschiedliche Systeme unabhängig davon, ob die Architektur Big-Endian oder Little-Endian ist, eine Unicode-Textdatei richtig darstellen. In einer Text- oder Script-Datei nach ISO-Zeichensatz haben Byte-Order-Marks nichts verloren, die in UTF-Codierung eigentlich nur ein einziges Zeichen sind, aber bei einer misslungenen Umcodierung durch Editoren als drei Bytes (EF BB EF) interpretiert werden. Script-Dateien für PHP sollten ebenfalls kein BOM enthalten, egal wie die Datei kodiert ist. Eine irritierende Eigenschaft des Byte-Order-Marks ist, dass es viele Texteditoren wie etwa Gedit nicht anzeigen. Denn es gehört zu den nicht-druckbaren Zeichen. Die meisten Editoren, die mit UTF-8/16/32 umgehen können, filtern es deshalb heraus, egal wie die Datei tatsächlich kodiert ist. In den Dateien von Webprojekten kann die resultierende Zeichenfolge aber gerade bei PHP für lästige Fehler sorgen. Welche Dateien in aktuellen Ordnern und dessen Unterordnern ein BOM enthalten, zeigt im Terminal folgender Befehl an:

grep -Rl $'\xEF\xBB\xBF' *

Mit einem anderen Kommando bekommt man das deplatzierte Byte-Order-Mark aus Textdateien wieder heraus. So geht das beispielsweise für alle Dateien mit der Endung PHP im aktuellen Verzeichnis:

sed -i '1 s/^\xef\xbb\xbf//' *.php

Manuell kann man das Byte-Order-Mark auch mit dem Editor Vim entfernen. Öffnen Sie dazu die Datei mit vim [Dateiname], und geben Sie im Befehlsmodus die Vim-Befehle

:set nobomb

ein, bevor Sie die Datei dann mit :wqspeichern.