Sebastian: Zeilenumbrüche in txt.datei

Hallo,

ich möchte in einem Gästebuch Script Text aus einem Formularfeld in einer Textdatei speichern. Ansich sehr simple, doch habe ich ein Problem mit den Zeielnumbrüchen.

fputs ($handle, "Eintrag Nr.$count\n<b>$maillink</b>\n$text\n\nEingetragen am: $datum um $uhrzeit Uhr\n<img src="gfx/pixel-line-2.gif" alt="" />\n");

Normalerweise sollte jetzt in der Textdatei ($handle) ein Eintrag stehen, der auf mehrere Zeilen aufgeteilt ist, doch sehe ich an den Stellen wo der Umbruch sein müsste nur diese ominösen Kästchen, von dene en ich schon immer mal wissen wollte, wieso sie manchmal auftreten und manchmal nicht.

Vielleicht ist hier ja ein Fuchs, der mir das erklären kann.
Ein Lösungsansatz für die Übertragung meiner Zeilenumbrüche, die ich umbedingt haben will wäre auch sehr nett.

Gruß
Sebastian

  1. Hi,

    Normalerweise sollte jetzt in der Textdatei ($handle) ein Eintrag stehen, der auf mehrere Zeilen aufgeteilt ist, doch sehe ich an den Stellen wo der Umbruch sein müsste nur diese ominösen Kästchen, von dene en ich schon immer mal wissen wollte, wieso sie manchmal auftreten und manchmal nicht.

    dieses "ominöse Kästchen" ist der Weg, mit dem Dein Textanzeigeprogramm mit unbekannten Zeichen umgeht. Es sieht die entsprechenden Zeichen - also die "\n", wie ich vermute - nicht als Zeilenumbruch an. Dies bedeutet _nicht_, dass es kein Zeilenumbruch ist; vermutlich aber schon, dass es _auf Deinem System_ keiner ist.

    Ein Lösungsansatz für die Übertragung meiner Zeilenumbrüche, die ich umbedingt haben will wäre auch sehr nett.

    Übertragung? FTP? ASCII-Mode. Informiere Dich ansonsten, welche(s) Zeichen auf dem System, welches sie speichert, als Zeilenumbruch gilt/gelten.

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi,

      dieses "ominöse Kästchen" ist der Weg, mit dem Dein Textanzeigeprogramm mit unbekannten Zeichen umgeht. Es sieht die entsprechenden Zeichen - also die "\n", wie ich vermute - nicht als Zeilenumbruch an. Dies bedeutet _nicht_, dass es kein Zeilenumbruch ist; vermutlich aber schon, dass es _auf Deinem System_ keiner ist.

      Das stimmt wohl,
      Christian Seiler hat mir auch schon erklärt, wie ich dieses Nichterkennen  umgehen bzw. korrigieren kann.
      Ich werde mich mal ranmachen und denn Umgang mit der suchen und ersetzen-Funktionalität von PHP lernen. Das ist ja ne feine Sache.

      Übertragung? FTP? ASCII-Mode. Informiere Dich ansonsten, welche(s) Zeichen auf dem System, welches sie speichert, als Zeilenumbruch gilt/gelten.

      Das ist inzwischen auch schon geklärt.
      War zugegebenermaßen auch etwas undeutlich formuliert. Meine eifrige Eile!

      Danke dir!

      Gruß
       Sebastian

      ---<( Syntaxterror )>---

  2. Hallo Sebastian,

    Normalerweise sollte jetzt in der Textdatei ($handle) ein Eintrag stehen, der auf mehrere Zeilen aufgeteilt ist, doch sehe ich an den Stellen wo der Umbruch sein müsste nur diese ominösen Kästchen,

    Du verwendest ein Betriebsystem, das \n (bzw. \012) nicht als Zeilenumbruchzeichen erkennt. Wenn Du Windows verwendest, ist es \r\n (bzw. \015\012) und wenn Du einen Mac verwendest, dann ist es \r (bzw. \015)

    Ein Lösungsansatz für die Übertragung meiner Zeilenumbrüche, die ich umbedingt haben will wäre auch sehr nett.

    Ich dachte, die schreibst Du mit einem Gästebuch hinein und liest die dann wieder aus? Dann ist es doch vollkommen egal, als was die Zeilenumbrüche gespeichert werden, wenn Du sie hinterher wieder so auslesen kannst, dass es passt.

    Prinzipiell würde ich alle Zeilenumbrüche in einem Text bei der Eingabe in UNIX-Zeilenumbrüche (\n) verwandeln:

    $text = preg_replace ("!\015\012|\015|\012!", "\012", $text);

    Wenn Du das erledigt hast, dann ist jeder Zeilenumbruch im Text garantiert durch \012 (oder \n) dargestellt. Diese kannst Du dann je nach Ausgabeart weiterverarbeiten. (Du kannst natürlich auch nach \015\012 (Windows) oder nach \015 (Mac) ersetzen, Du müßtest dann halt den zweiten Parameter ("\012") ändern)

    Viele Grüße,
    Christian

    --
    Hast Du einen Beitrag? Nur her damit!
    http://aktuell.de.selfhtml.org/tippstricks/beitrag.htm
    SELF-Code: (http://emmanuel.dammerer.at/selfcode.html)
    sh:) fo:) ch:] rl:( br:> n4:& ie:% mo:) va:) de:] zu:) fl:( js:| ss:) ls:[
    1. Hallo Christian,

      Du verwendest ein Betriebsystem, das \n (bzw. \012) nicht als Zeilenumbruchzeichen erkennt. Wenn Du Windows verwendest, ist es \r\n (bzw. \015\012) und wenn Du einen Mac verwendest, dann ist es \r (bzw. \015)

      Das ist interessant!

      Ein Lösungsansatz für die Übertragung meiner Zeilenumbrüche, die ich umbedingt haben will wäre auch sehr nett.

      Ich dachte, die schreibst Du mit einem Gästebuch hinein und liest die dann wieder aus? Dann ist es doch vollkommen egal, als was die Zeilenumbrüche gespeichert werden, wenn Du sie hinterher wieder so auslesen kannst, dass es passt.

      Ich gebe z, die zweite Frage war eigentlich überflüssig und ist mit deiner Antwort sozusagen auch schon "bedient".

      Prinzipiell würde ich alle Zeilenumbrüche in einem Text bei der Eingabe in UNIX-Zeilenumbrüche (\n) verwandeln:

      $text = preg_replace ("!\015\012|\015|\012!", "\012", $text);

      Mit dieser suchen und ersetzen-Geschichte wollte ich mich sowieso noch intensiv auseinandersetzen, da ich die Regulären Ausdrücke sehr interessant finde, mal davon abgesehen, das man sie wohl eh andauernd braucht.

      Ich danke dir für deine Hilfe!

      Gruß
      Sebastian

    2. Hallo Christian,

      ich habe nun doch noch eine Frage zu deinem regulären Ausdruck.
      Ich habe versucht die Anweisung in meine "Verständnis-Sprache" zu übersetzen.
      Ich habe ein Apache-Buch in dem reguläre Ausdrücke erklärt werden, doch irgenwie habe ich zum Beispiel das Ausrufezeiechen, welches du benutzt garnicht gefunden.

      Es wäre lieb, wenn du mir die Anweisung "übersetzen" könntest.
      Ich meine etwa so

      $text = preg_replace ("!\015\012|\015|\012!", "\012", $text);

      wenn zeichen sowieso dann ersetze durch ...

      Einen freundlichen Gruß sendet dir
      Sebastian

      1. Hallo Sebastian,

        | $text = preg_replace ("!\015\012|\015|\012!", "\012", $text);
                                          ^    ^
                                 1        2    3    4

        Suche nach der Zeichenfolge \015\012 oder (2) nach der Zeichenfolge \015 oder (3) nach der Zeichenfolge \012. Die Zeichen bei (1) und (4) sind die Trennzeichen, die von preg_replace gefordert werden. (im Gegensatz zu den ereg-Funktionen) Näheres (auch zu regulären Ausdrücken) unter http://de3.php.net/manual/de/ref.pcre.php

        "Knifflig" an diesem speziellen Ausdruck ist, dass \015\012 _vor_ allem anderen kommen muss, da ja diese beiden Zeichen _auf einmal_ einen Zeilenumbruch darstellen. Wenn jetzt aber nun davor nur nach \015 (z.B. mit "!\015|\015\012|\012!") gesucht werden würde, dann würde er zuerst alle \015 ersetzen und dann erst alle \015\012, die er dann aber nicht mehr finden würde.

        Wenn Du ein weniger kritisches Beispiel willst:

        $text = preg_replace ('!ciao|moin!', 'hallo', $text);

        Das hier sucht nach ciao oder moin und ersetzt den jeweiligen Fund durch hallo.

        Viele Grüße,
        Christian

        --
        Hast Du einen Beitrag? Nur her damit!
        http://aktuell.de.selfhtml.org/tippstricks/beitrag.htm
        SELF-Code: (http://emmanuel.dammerer.at/selfcode.html)
        sh:) fo:) ch:] rl:( br:> n4:& ie:% mo:) va:) de:] zu:) fl:( js:| ss:) ls:[
        1. Hi,

          vielen vielen Dank!
          Ich werde mir deine Erläuterung mal in Ruhe anschauen.

          http://de3.php.net/manual/de/ref.pcre.php

          Ich war gerade dabei, mir die Erklärung im PHP-Maual anzuschauen,
          doch das ist bei dem Thema leider komplett in Englisch und nicht gerade Small-talk-Englisch. Da versteh ich nur die Hälfte und das ist bei dem Thema nicht gerade die optimale Vorraussetzung.

          Ich werde auch noch mal im Netz forsten, ob eine ausführlich Erklärung in D gibt.

          Auf jeden Fall bringt mich deine Erläuterung schon mal ein gutes Stück weiter, was meine momentane Problematik angeht.

          Also, noch einen schönen Abend
          und bis denne!

          gruß
          ZAB

  3. ersetzt den Zeilenumbruch durch "\r\n" dann klappt es!

    bein einlesen der textdatei und ausgabe in einer HTML datei muß die Zeichenfolge mit nl2br() ausgegeben werden damit die Zeilenumbrüche erhalten bleiben!

    Beispiel "echo nl2br($text);"

    viele Grüsse

    Sebastian