Hallo Thomas,
Zeilenumbrüche sind nicht gleich Zeilenumbrüche
\n erzeugt tatsächlich einen Zeilenumbruch (diesen kannst du in der Quelltext-Ansicht des Browsers auch sehen).
Dieser Zeilenumbruch (wie auch andere Steuerzeichen) hat aber keinerlei Relevanz für die interpretierte HTML Ansicht des Browsers. Dort wird automatisch umgebrochen.
Möchtest du einen sichtbaren Zeilenumbruch erwirken, so musst du dies mit HTML Mitteln tun, also durch das <br>-Tag.
PHP kennt dafür die Funktion nl2br() die alle Zeilenumbrüche gegen das HTML Äquivalent austauscht.
Eine andere Möglichkeit wäre es, den Bereich der Steuerzeichen enthält als präformatiertem Textblock zu definieren, mit Hilfe von <pre> als Beginn und </pre> als Ende.
mit freundlichen Grüßen,
Altrea