Umwandlung: \n in XXX
Alex
- php
Hi Leute,
mal ne Frage wie wandle ich einen Zeilenumbruch in einem String in ein anderes Zeichen um?
Wenn ich zu Testzwecken einen String erstelle "aaa\nbbb\nccc\nddd" und da dann str_replace("\n", "-", $string) drauf ausführe klappt es wunderbar.
Wenn ich aber einen String aus einer MySQL Datenbank auslese, ersetzt er zwar den Zeilenumbruch, fügt aber irgendwie noch einen neuen hinzu???
Ausgabe ohne Bearbeitung (also String direkt aus DB):
aaa
bbb
ccc
Ausgabe nach Bearbeitung mit str_replace("\n", "-", $string):
aaa
-bbb
-ccc
Habe auch schon preg_replace() und nl2br() probiert, gleiches Problem.
Ist da noch ein anderes Steuerzeichen, daß ersetzt werden muss?
Danke
echo $begrüßung;
Wenn ich aber einen String aus einer MySQL Datenbank auslese, ersetzt er zwar den Zeilenumbruch, fügt aber irgendwie noch einen neuen hinzu???
Schau erst einmal genau nach, was aus der DB kommt:
echo chunk_split(bin2hex($testString), 2, ' ');
Dieses Code-Stück liefert dir die Hex-Werte der Bytes von $testString.
echo "$verabschiedung $name";
da wo der Zeielnumbruch ist sind diese Zeichen zu finden:
0d 0a
sind das 2 verschiedene Zeilenumbrüche ?
Hi Alex,
sind das 2 verschiedene Zeilenumbrüche ?
Ohne nachgesehen zu haben, aber das dürfte wohl \r\n sein - das ist ein Zeilenumbruch im Windows Format. Du kannst jetzt natürlich \r\n ersetzen lassen, dann gibt das aber nichts mehr, wenn mal nur \n da ist. Deshalb würde ich erst alle \r\n oder nur \r (Mac Zeinlenumbruch) in \n umwandeln und dann \n ersetzen lassen.
MfG, Dennis.
Ah ja es ist ein \r und ein \n
Ich habe jetzt erst die "\r" in "" ersetzt und dann die "\n" in "-" ersetzt und es klappt.
Vielen Dank
mfg Alex
Hi Alex,
Ich habe jetzt erst die "\r" in "" ersetzt und dann die "\n" in "-" ersetzt und es klappt.
Dann kriegst du aber ein Problem, wenn mal ein Zeilenumbruch im (ich glaube es war) Mac Format da ist - der besteht naämlich nur aus \n ;-)
Du müsstest zuerst alle \r\n durch \n ersetzen und dann noch alle \r durch \n.
MfG, Dennis.
Hallo Dennis.
Dann kriegst du aber ein Problem, wenn mal ein Zeilenumbruch im (ich glaube es war) Mac Format da ist - der besteht naämlich nur aus \n ;-)
Nein:
Unix: LF
Mac: CR
Win: CR+LF
Einen schönen Sonntag noch.
Gruß, Ashura
Hi Ashura,
... - der besteht nämlich nur aus \n ;-)
da sollte statt \n \r stehen - sorry, vertippt ;-)
Nein:
Unix: LF
Mac: CR
Win: CR+LF
Genau.
MfG, Dennis.
Hello,
Unix: LF
Mac: CR
Win: CR+LF
Und plattformunabhängig in der Textarea eines Browsers?
Was ist festgelegt, und was ist Standard/Praxis?
Harzliche Grüße vom Berg
esst mehr http://www.harte-harzer.de
Tom
Gut wäre schon so gegangen, aber habs nochmal umgeändert.
So müssten eigentlich alle Varationen abgedeckt sein oder?
Und auch so das kein doppeltes "-" auftaucht.
$mitcr = $row["content"];
$ohnecr = str_replace("\r\n", "-", $mitcr);
$ohnecr = str_replace("\n\r", "-", $ohnecr);
$ohnecr = str_replace("\r", "-", $ohnecr);
$ohnecr = str_replace("\n", "-", $ohnecr);
Hello,
Gut wäre schon so gegangen, aber habs nochmal umgeändert.
So müssten eigentlich alle Varationen abgedeckt sein oder?
Und auch so das kein doppeltes "-" auftaucht.$mitcr = $row["content"];
$ohnecr = str_replace("\r\n", "-", $mitcr);
diese Variante ist kein ordnungsgemäßer Zeilenumbruch, müsste also eine Sonderbehandlung haben.
$ohnecr = str_replace("\r", "-", $ohnecr);
$ohnecr = str_replace("\n", "-", $ohnecr);
Harzliche Grüße vom Berg
esst mehr http://www.harte-harzer.de
Tom
Hello,
sind das 2 verschiedene Zeilenumbrüche ?
Nein, beide Zeichen zusammen werden als einer gewertet.
Ohne nachgesehen zu haben, aber das dürfte wohl \r\n sein - das ist ein Zeilenumbruch im Windows Format. Du kannst jetzt natürlich \r\n ersetzen lassen, dann gibt das aber nichts mehr, wenn mal nur \n da ist. Deshalb würde ich erst alle \r\n oder nur \r (Mac Zeinlenumbruch) in \n umwandeln und dann \n ersetzen lassen.
Das ist ungünstig, da man dadurch aus einem Zeilenumbruch zwei machen würde.
Besser ist es
replace "0d 0a" gegen neues Zeichen
replace "0d" gegen neues Zeichen
replace "0a" gegen neues Zeichen
alle drei Ersetzungen nacheinander durchführen zu lassen.
Nun noch zum Effekt, dass dann wieder ein neuer Zeilenumbruch entsteht.
Ich vermute, dass Alex die Ausgabe in einer Textarea eines Browsers durchgeführt hat.
Der Browser ergänzt unvollständige Zeilenumbrüche, also einzelne 0d oder 0a durch die vollständige Sequenz 0d 0a. Wenn man also nur eins von beiden Zeichen ersetzt, dann ist der ursprüngliche Zeilenumbruch nach dem Durchlaufen der Textarea wieder vorhanden
Die Datenbankschnittstellen ersetzen da i.d.R. nichts.
Harzliche Grüße vom Berg
esst mehr http://www.harte-harzer.de
Tom