PHP und UTF mit BOM zerstört Layout/HTML

Wieder einmal ein paar Stunden damit verbracht nach absolut unerklärlichen Problemen im Layout einer PHP Website zu suchen.

Auswirkung:
Einige Seiten einer PHP Webseite hatten unerklärlicher Weise komplett "zerschossenes" Layout.
Nachweibar im IE9 Developer Tool und FireFox Firebug waren zwischen einigen HTML Tags sowie vor dem beginnenden <HTML> Tag unsichtbare Zeichen.
Hat man sich den "generierten Quellcode" wie FireFox Webdeveloper Toolbar angeschaut, konnte man sehen, das das gerenderte HTML komplett durcheinander war.
Der Komplette Inhalt von <head>…</head> war auf einmal innerhalb des <body> tags und Stylesheets zeigten verwirrende Anwendung.

Nach langem Gesuche und konvertierungen von Zeichen und Dateien, ist mir dann aufgefallen, das es nur auf Seiten stattfindet die als UTF8 codierte Sourcefile includen.

Es stellte sich heraus (mit Hilfe vom Notepad++ welches alle unsichtbaren Zeichen und Kodierungen einer Datei anzeigen kann), das es Sourcefiles betrifft, die als UTF + BOM kodiert sind.
Das BOM führt im include() einer Datei dazu, das PHP nicht darstellbare Zeichen im Output hat die in regulären Editoren garnicht erscheinen oder als Leerzeichen zu erkennen sind.
Umkodierung der Files in UTF8 ohne BOM hat das Problem gelöst.

BOM = Byte Order Mark

 

Update:

Um unter Linux einen Ordner zu scannen nach allen Dateien die ein BOM enthalten, verwende ich folgende commands:

root:# find -type f | while read file; do \
[ "`head -c3 -- "$file"`" == $'\xef\xbb\xbf' ] \
&& echo "found BOM in: $file";done