Alex: Umwandlung: \n in XXX

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

  1. 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";

    1. da wo der Zeielnumbruch ist sind diese Zeichen zu finden:
      0d 0a

      sind das 2 verschiedene Zeilenumbrüche ?

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

        --
        Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
        Dies hier ist ein öffentliches Forum - wer dir hier geholfen hat, hat dies vollkommen freiwillig und unter Aufopferung seiner Freizeit getan!
        1. 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

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

            --
            Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
            Das ist eine Ehrlichkeit, die an Blödheit grenzt. (Thomas Gottschalk)
            1. 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

              --
              Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|
              30 Days to becoming an Opera8 Lover -- Opera Mini on Treo
              Meine Browser: Opera 8.02 | Firefox 1.0.6 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0
              [Deshalb frei! - Argumente pro freie Software]
              1. 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.

                --
                Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
                Die Stoßstange ist aller Laster Anfang! (Häfft)
              2. 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

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau
            2. 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);

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

                $ohnecr = str_replace("\n\r", "-", $ohnecr);

                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

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau
        2. 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

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau