Zeilenumbrüche in <textarea> umwandeln
Sarah
- php
0 wucher wichtel0 Sarah
0 Tom0 Sarah
0 Daniel
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!
Hallo!
Du suchst warscheinlich nl2br().
ciao, ww
Hallo!
Du suchst warscheinlich nl2br().
ciao, ww
Hallo,
ne, so will ich das leider nicht:(
Liebe Grüße!
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
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#bereicheManche 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.deTom
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
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