Andreas: Zeilenumbrüche in Textfeldern

Ich schreibe gerade an einem Forum und mein Problem ist das Textfeld in dem der Kommentar eingegeben wird. Wenn ich einen Text eingebe, return drücke und wieder einen Text eingebe sollte der neu eingegebene Text eigentlich in einer neuen Zeile stehen. Wenn ich den Kommentar jedoch aus der Datenbank auslese, wird er jedoch hintereinander weg geschrieben ohne irgendwelche Absätze, die manuell eingefügt wurden. Automatische Zeilenumbrüche werden allerdings gemacht.
Wenn ich beim auslesen nun ein <pre></pre> tag um den kommentar herum stelle, werden die manuellen brüche angezeigt, jedoch werden die automatischen zeilenumbrüche nicht mehr getätigt. wenn ein verfasser un seinem text also keinmal return drückt, hat man ne ziemlich lange zeile. außerdem ist der <pre> tag ja nicht gerade der schönste html-code

Wie kann ich das also machen, dass vom User eingegebene Zeilenumbrüche mittels Return auch bei der Ausgabe angezeigt werden? Es darf auch ne PHP oder JavaScript Lösung sein, es muss nur funktionieren. Zur Zeit komme ich einfach auf keine Lösung.

Danke schonmal im voraus.

  1. Erstmal gehe ich davon aus, das du das kennst http://selfhtml.teamone.de/html/formulare/eingabe.htm#bereiche_umbruch

    Dann ist ein Problem, das jedes Betriebssytem andere Umbrüche macht. dies musst du in beim abspeichern berücksichten. in einer RegEx etwas so:

    my $i =~ s/\015\012|\015|\012/<BR>/g;

    Das bedeutet, daß die Zeichen mit dem code 10 und 13 in einen HTML Code umgewandelt werden und da es drei (gängige) Kombinationen gibt eben so.

    Du kannst das beim Ausgeben oder beim abspeichern machen.
    Aber du musst aufpassen, wenn du das obige dann wieder in einer Textarea (zum bearbeiten z.b) ausgibst, müßtest du dann '<br>' wieder in ein '\n' umwandeln.

    Struppi.

    1. P.S. da ich nur Perl kann, weiss ich es nicht, aber ich vermute mal das es in PHP schon eine Funktion gibt, die die Newlines umwandeln kann. Keine Ahnung, aber bevor du anfängst meinen Code verstehen zu wollen. Frag mal PHP'ler.

      Struppi.

  2. Hi Andreas,

    Wie kann ich das also machen, dass vom User eingegebene Zeilenumbrüche mittels Return auch bei der Ausgabe angezeigt werden? Es darf auch ne PHP oder JavaScript Lösung sein, es muss nur funktionieren. Zur Zeit komme ich einfach auf keine Lösung.

    wenn ich Dich richtig verstanden habe, suchst du die php-Funktion nl2br():

    $eintrag=nl2br($eintrag);

    Grüße,

    jens

    1. *sich vor den kopf haut*
      jo die ist es, habe kurz nach meinem post mal nachgedacht und dann bemerkt dass der unnötig war. hatte es jetzt so gelöst:

      function kommentarsplit($kommentar) {
      $array = explode ("\n", $kommentar);
      for ($i=0; $i<count($array); $i++) {
       echo $array[$i] . "<br>";
      }

      aber deine methode is ja etwas weniger speicherfressend

      *merkt sich dass er die ganzen php-string funktionen wohl doch nochmal lernen muss*

      1. *sich vor den kopf haut*
        jo die ist es, habe kurz nach meinem post mal nachgedacht und dann bemerkt dass der unnötig war. hatte es jetzt so gelöst:

        function kommentarsplit($kommentar) {
        $array = explode ("\n", $kommentar);
        for ($i=0; $i<count($array); $i++) {
         echo $array[$i] . "<br>";
        }

        aber deine methode is ja etwas weniger speicherfressend

        *merkt sich dass er die ganzen php-string funktionen wohl doch nochmal lernen muss*

        wie gesagt, bei dir am Server kommen die umbrüche an, die auf dem client erzeugt werden und diese unterscheiden sich evtl. voneinander.

        Win/DOS = CR/LF
        Linux = LF
        Mac = CR

        Dass heißt das '\n' je nach Betriebsystem ein anderen Wert hat. Dein Beispiel  sollte eigentlich nicht mit daten funktionieren, die aus einem Mac kommen (es sei den explode() merkt das von alleine).

        Falls du die mit den Daten arbeitest können unter Umständen noch mehr Probleme entstehen (z.b. ein leere Zeile).
        Also aufgepasst!

        Struppi.

        1. Dass heißt das '\n' je nach Betriebsystem ein anderen Wert hat. Dein Beispiel  sollte eigentlich nicht mit daten funktionieren, die aus einem Mac kommen (es sei den explode() merkt das von alleine).

          Ich hab mal ein wenig recherchiert und so wie es aussieht, ist das Porblem bekannt und evtl. schon gelöst, durch die Funktion nl2br().

          Struppi.