Sarah: Zeilenumbrüche in <textarea> umwandeln

Hallo,

ich möchte Zeilenümbrüche aus einem Texteingabefeld mit PHP umwandeln. Das soll so aussehen:

Eingabe in <textarea>:

Absatz 1

Absatz 2

Absatz 3
usw.

Das Ergebnis soll dann so aussehen:

<p>Absatz 1</p>
<p>Absatz 2</p>
<p>Absatz 3</p>

Wie kann ich das am besten machen?
Leider bin ich noch Anfängerin in PHP :( Ich kriegs einfach nich hin.

Und noch eine Frage. Wofür ist das Attribut wrap="virtual" gut? Sollte ich das in <textarea> einsetzen?

Liebe Grüße von der Verzweifelten!

  1. Hallo!

    Du suchst warscheinlich nl2br().

    ciao, ww

    --
    Schäuble:
      "Wir können alles. Außer Rechtsstaat."
    1. Hallo!

      Du suchst warscheinlich nl2br().

      ciao, ww

      Hallo,

      ne, so will ich das leider nicht:(

      Liebe Grüße!

  2. Hello,

    ich möchte Zeilenümbrüche aus einem Texteingabefeld mit PHP umwandeln. Das soll so aussehen:

    Eingabe in <textarea>:

    Absatz 1

    Absatz 2

    Absatz 3
    usw.

    Das Ergebnis soll dann so aussehen:

    <p>Absatz 1</p>
    <p>Absatz 2</p>
    <p>Absatz 3</p>

    Wie kann ich das am besten machen?

    Die Browser _sollten_ alle, egal auf welchem System sie laufen, ein CRLF senden beim Zeilenumbruch, wenn die passende Umbruchmethode für die Textarea im HTML gefordert wurde. (wrap="soft")
    http://de.selfhtml.org/html/formulare/eingabe.htm#bereiche

    Manche Browser senden aber trotzdem nur CR oder LF.
    Diesen Schaden müsstest Du auf dem Server erst einmal beheben. Es reicht, die LF (=chr(10)) aufzuheben. Der IE würde in einer Textarea die LF sowieso wieder zu CRLF ergänzen.

    Also nimmst Du str_replace() http://www.php.net/manual/en/function.str-replace.php
    und tauschst die Umbrüche aus.

    Erst die CRLF gegen LF, dann die CR gegen LF und am Ende die LF gegen

    "</p>".LF."<p class="meine_Klasse_Textbox">";

    define (CR, chr(13));
    define (LF, chr(10));

    $textarea = str_replace(CR.LF, LF, $_POST['textarea']);
    $textarea = str_replace(CR, LF, $textarea;
    $textarea = str_replace(LF,   "</p>".LF."<p class="meine_Klasse_Textbox">", $textarea);
    $textarea = "<p class="meine_Klasse_Textbox">".$textarea."</p>".LF;

    In der letzten Zeile werden dann nur die äußeren Grenzen ergänzt.

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

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

    1. Hello,

      ich möchte Zeilenümbrüche aus einem Texteingabefeld mit PHP umwandeln. Das soll so aussehen:

      Eingabe in <textarea>:

      Absatz 1

      Absatz 2

      Absatz 3
      usw.

      Das Ergebnis soll dann so aussehen:

      <p>Absatz 1</p>
      <p>Absatz 2</p>
      <p>Absatz 3</p>

      Wie kann ich das am besten machen?

      Die Browser _sollten_ alle, egal auf welchem System sie laufen, ein CRLF senden beim Zeilenumbruch, wenn die passende Umbruchmethode für die Textarea im HTML gefordert wurde. (wrap="soft")
      http://de.selfhtml.org/html/formulare/eingabe.htm#bereiche

      Manche Browser senden aber trotzdem nur CR oder LF.
      Diesen Schaden müsstest Du auf dem Server erst einmal beheben. Es reicht, die LF (=chr(10)) aufzuheben. Der IE würde in einer Textarea die LF sowieso wieder zu CRLF ergänzen.

      Also nimmst Du str_replace() http://www.php.net/manual/en/function.str-replace.php
      und tauschst die Umbrüche aus.

      Erst die CRLF gegen LF, dann die CR gegen LF und am Ende die LF gegen

      "</p>".LF."<p class="meine_Klasse_Textbox">";

      define (CR, chr(13));
      define (LF, chr(10));

      $textarea = str_replace(CR.LF, LF, $_POST['textarea']);
      $textarea = str_replace(CR, LF, $textarea;
      $textarea = str_replace(LF,   "</p>".LF."<p class="meine_Klasse_Textbox">", $textarea);
      $textarea = "<p class="meine_Klasse_Textbox">".$textarea."</p>".LF;

      In der letzten Zeile werden dann nur die äußeren Grenzen ergänzt.

      Harzliche Grüße vom Berg
      http://www.annerschbarrich.de

      Tom

      Hallo Tom,

      besten Dank für Deine Antwort. Leider merke ich habe ich nicht ganz genau beschrieben, was ich brauche. Es muß unterschieden werden zwischen der Anzahl der Zeilenumbrüche.

      Abs1

      Abs2
      kein Abs3

      Abs3

      Abs4

      Abs5

      So, "kein Abs3" soll nur ein <br /> nach "Abs 3" erzeugen. Der längere Abstand zwischen "Abs3" und "Abs4" (3 Zeilen) bzw. "Abs4" und "Abs5" soll durch <br /> und <p> erreicht werden. In CSS habe ich für <p> einen margin-bottom von 1em festgeschrieben.

      Der Code insgesamt müßte dann so aussehen:

      <p>Abs1</p>
      <p>Abs2<br />
      kein Abs3</p>
      <br>
      <p>Abs4</p>  (oder das <br> in <p>, egal)
      <br>
      <br>
      <p>Abs5</p>

      Geht das auch mit str_replace?

      Ich hatte es bisher so um an die Absätze und einfachen Zeilenumbrüche zu kommen:

      $absaetze = preg_split("/(\r\n){2,}/", $_POST['textarea']);
      $breaks = explode("\r\n", $absaetze[$i]); (mit einer Schleife für jeden einzelnen Absatz).

      Leider komme ich damit nur zu ein- und zweizeiligem Abstand. Wenn es mehr Zeilen sind, werden sie ja von der ersten Zeile eliminiert. Es wäre aber wichtig, daß mehrzeilige Umbrüche erhalten bleiben erhalten bleiben. Also wenn 3 ZeilenÜmbrüche, dann zwei raus und einen in ein <br> umwandeln und dem <p> hinzufügen.

      Ich kriegs nicht hin ...

      Liebe Grüße
      Sarah

  3. Ahoi Sarah,

    probier evt. Toms-Ansatz ( http://forum.de.selfhtml.org/my/?t=152246&m=990359 )

    Ersetzte allerdings das:
    $textarea = str_replace(LF,   "</p>".LF."<p class="meine_Klasse_Textbox">", $textarea);
    $textarea = "<p class="meine_Klasse_Textbox">".$textarea."</p>".LF;

    duch ein

    $textarea = explode ( LF, $textarea);

    vll hilft dir das weiter, einfach die leeren elemente nach einem vollen zählen und dafür <br /> setzten, um die nicht leeren ein <p></p> setzten. etc.

    MfG