PHP: header und „UTF8 mit BOM“ Problem

Bei einem Projekt, wo ein Login-System in PHP implementiert werden sollte, sollte ein Redirect zum Login-Formular erfolgen, wenn der Benutzer noch nicht angemeldet ist. Dazu verwende ich üblicherweise die Header-Funktion, die nach der Prüfung ausgeführt wird:



header("location: login.php");
exit;

Das Problem

An dieser Stelle bekam ich plötzlich diese Fehlermeldung, die ich bisher nie hatte:

Warning: Cannot modify header information - 
headers already sent by (output started at
/share/CACHEDEV1_DATA/Web/meineWebsite/login.php:1) 
in /share/CACHEDEV1_DATA/Web/meineWebsite/login.php
on line 74

Diese Meldung besagt, dass der Header nicht modifiziert werden kann, da bereits ein Header ausgeführt wurde. Da mein PHP-Script definitiv vor dem HTML-Code ausgeführt wird, verstand ich das Problem nicht.

Die Ursache

Als ich mir den Quelltext mit Hilfe des Entwicklertools des Google Chrome angeschaut habe, fiel mir der Break „“ auf, der ganz am Anfang der Webseite erzeugt wurde. Mit diesem Break wird bereits ein HTML-Code erzeugt, der letztendlich verhindert, dass ich einen neuen Header laden kann. Wo kam also dieser Break her? Nach einer Google-Recherche fand ich heraus, dass das an der Kodierung der Datei „login.php“ liegt. Byte order mark, kurz BOM, ist eine Bytefolge „U+FEFF“, die bei „UTF mit BOM“ bzw. „UTF mit Signatur“ am Anfang der Datei verwendet wird. Diese Bytefolge wird also von PHP falsch interpretiert, sodass bereits an der ersten Stelle im Quelltext ein HTML-Code erzeugt wird. Diese Kodierung wird bei Wikipedia ausführlich beschrieben: https://de.wikipedia.org/wiki/Byte_Order_Mark

Die Lösung

Ist ganz einfach: Die Datei muss in diesem Fall neu kodiert werden, indem sie beim „Speichern unter“ andere Kodierung erhält. Diese Möglichkeit bieten fast alle Editoren, auch das Notepad in Windows 10:

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.