Zeilenumbrüche in UTF8!?

Hallo Leute,

ich habe folgendes Problem:
Ich möchte durch folgendes Script einen Zeilenumbruch erzeugen:

$ergebnis = str_replace('\r\n','<br />',$ergebnis);

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?

Mit freundlichen Grüßen

verwende doch einfach
$ergebnis = nl2br($ergebnis);

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).

Der HTML-Spezifikation etwa entnimmt man:

edition-w3.de/TR/1999/REC-ht … ml#h-9.3.2

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)

Also erstmal Danke für die schnellen Antworten, ich habs jetzt mit: nl2br() gelöst!

Mit freundlichen Grüßen

möchte noch ne Kleinigkeit hinzufügen:

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.

$ergebnis = str_replace("\n",'<br />',$ergebnis);
//und eventuell noch:
//$ergebnis = str_replace("\r",'',$ergebnis); //alle Carriage Return entfernen

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.

mfg Balmung

[quote]$ergebnis = str_replace("\n",’
’,$ergebnis);
$ergebnis = str_replace("\r",’’,$ergebnis); [/quote]

das würde auf einem Mac-System aber keine Umbrüche einfügen, da Mac nur mit “\r” arbeitet…
Besser ist das da: at.php.net/nl2br

Have Fun :wink:

ö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. :slight_smile:

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 :slight_smile:

mfg Balmung