Soweit so gut. Jetzt sind die Daten aber im UTF8 Format und das Script macht nicht mehr das was es sollte, habe schonmal gehört das UTF8 keine Zeilenumbrüche kennt, oder das diese vom Betriebssystem abhängen. Nach welchen Zeichen muss ich den suchen und ersetzen?
Ein Zeilenumbruch besteht aus Zeichen, die auch eine
unicode-Nummer haben, die dann natürlich auch unabhängig
davon ist, wie unicode konkret umgesetzt ist (ob also als UTF oder
als ISO).
Die sollten es also tun, willst du noch andere Zeichen
ersetzen, so kannst du in einer unicode-Tabelle nachgucken, wie
die bezeichnet sind. Wie die Nummern in PHP anzugeben sind,
müßtest du da nochmal nachgucken…
Achso, in der Tat bestehen Zeilenumbrüche bei Unix/Linux, Apple
oder microsoft-windows aus anderen Zeichenkombinationen,
letztere benutzen da mehr Zeichen als notwendig, das hängt aber
nicht mit der konkreten Kodierung zusammen, das Phänomen gab
es schon, bevor sich jemand UTF ausgedacht hat ;o)
das da klappt nicht, weil PHP die \r\n nicht als Zeilenumbruch interpretiert, sondern ganz normal als vier Zeichen. Damit es klappt muss man in PHP “\r\n” statt ‘\r\n’ nutzen (außer es handelt sich um bsp preg_replace() statt str_replace, das wäre wieder eine andere Geschichte).
\r erzeugt einen Carriage Return (ASCII 13) und \n dann den Line Feed (aka Newline ASCII 10).
Die Kombination \r\n ist mehr unter Windows üblich, aber nicht unter Linux (dort meistens nur \n, für einen Zeilenumbruch), von daher wäre es angebrachter das ganze so ausschauen zu lassen.
Der Vorteil bei UTF-8 ist, dass die Bytewerte 0-127 ganz normal wie im ASCII Zeichensatz interpretiert werden, denn UTF-8 nutzt nur die oberen 128 Bytewerte (128-255) zur Darstellung “höherer” Unicode Zeichen.
und da Carriage Return und Line Feed weit unterhalb, noch im ASCII Zeichensatz sind (13 und 10), sollte es keinerlei Unterschied geben, beim austauschen der Zeilenumbrüche in ISO oder UTF-8.
öh okay, das wusst ich jetzt tatsächlich nicht…
dann müsst man das schon bissel komplexer machen z.B. so:
Aber dann wäre nl2br natürlich einfacher.
Wenn man jetzt will, dass der “alte” Zeilenumbruch komplett verschwindet, oder man irgendwas anderes zusätzlich einfügen möchte, dann eignet sich die preg_replace() variante vielleicht