POST von HTML Area Textfield Zeilenumbruch
Hallo Community,
ich habe am Montag mit PHP angefangen und folglich ist mir noch einiges unklar. Zu meiner Überraschung konnte mir Google bei dieser "Anfängerfrage" auch keine wirklich zufriedenstellende Antwort liefern, also versuchte ich selbst Lösungen zu entwerfen.
Problem: Die Eingabe von einem Textareafield (HTML) sollte auch wieder formatiert (also mit den vom User getätigen Zeilenumbrüchen) ausgegeben werden können.
Wenn ich zB in die Textarea
"hallo
wie gehts
cu"
eintippe, dann erhalte ich im Falle von echo $_POST... "hallo wie gehts cu" zurück. Der Quelltext ließ mich vermuten, dass Zeilenumbrüche so dargestellt werden: "\n"
1. Lösung von mir:
Den Inhalt von _$POST.. zwischen pre Tags positionieren -> geht wunderbar... elegant: Nö, eher nicht
Die zweite und wohl elegantere Lösung:
mit str_replace einfach \n durch <br /> ersetzen.
Meine Frage: Gehts evt. noch besser? An der Stelle sollte ich vlt erwähnen, dass die Daten in einer Datenbank gespeichert werden. Obs wirklich so gut ist, wenn dort alles voller <br> Tags usw ist...
Und wenn wir schon beim Thema Zeilenumbrüche sind (im Buch wird drauf leider nie eingegangen)
Der von PHP erzeugte HTML Quellcode ist teilweise extremst grauenhaft zum Lesen, da längere whileschleifen mit Echoanweisungen im HTML Quelltext keinen einzigen Zeilenumbruch machen. Somit ist der HTML Quelltext unformatiert. Was kann ich dagegen tun? Einfach immer am Ende einer Echoanweisung "\n" anhängen?
Danke
ich habe am Montag mit PHP angefangen und folglich ist mir noch einiges unklar. Zu meiner Überraschung konnte mir Google bei dieser "Anfängerfrage" auch keine wirklich zufriedenstellende Antwort liefern, also versuchte ich selbst Lösungen zu entwerfen.
Problem: Die Eingabe von einem Textareafield (HTML) sollte auch wieder formatiert (also mit den vom User getätigen Zeilenumbrüchen) ausgegeben werden können.
Wenn ich zB in die Textarea
"hallo
wie gehts
cu"
eintippe, dann erhalte ich im Falle von echo $_POST... "hallo wie gehts cu" zurück. Der Quelltext ließ mich vermuten, dass Zeilenumbrüche so dargestellt werden: "\n"
1. Lösung von mir:
Den Inhalt von _$POST.. zwischen pre Tags positionieren -> geht wunderbar... elegant: Nö, eher nicht
Die zweite und wohl elegantere Lösung:
mit str_replace einfach \n durch <br /> ersetzen.
Meine Frage: Gehts evt. noch besser? An der Stelle sollte ich vlt erwähnen, dass die Daten in einer Datenbank gespeichert werden. Obs wirklich so gut ist, wenn dort alles voller <br> Tags usw ist...
Und wenn wir schon beim Thema Zeilenumbrüche sind (im Buch wird drauf leider nie eingegangen)
Der von PHP erzeugte HTML Quellcode ist teilweise extremst grauenhaft zum Lesen, da längere whileschleifen mit Echoanweisungen im HTML Quelltext keinen einzigen Zeilenumbruch machen. Somit ist der HTML Quelltext unformatiert. Was kann ich dagegen tun? Einfach immer am Ende einer Echoanweisung "\n" anhängen?
Danke
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 139053
Url: https://administrator.de/forum/post-von-html-area-textfield-zeilenumbruch-139053.html
Ausgedruckt am: 23.12.2024 um 19:12 Uhr
7 Kommentare
Neuester Kommentar
Der von PHP erzeugte HTML Quellcode ist teilweise extremst grauenhaft zum Lesen ...
arbeite mit Templates bzw. ErsetzungsmarkenObs wirklich so gut ist, wenn dort alles voller <br> Tags usw ist...
Also die DB sollte schon die Daten enthalten wie diese vom Benutzer kommen.Und die Ersetzung von "\n" nach '<br />' ist durchaus bekannt, da es nicht das einzige ist. Denke mal an Zeichen wie Ä,Ü und Ö - diese sollten auch in den entsprechenden HTML Code umgewandelt werden. Danach kannst Du dir noch Gedanken machen was passiert wenn jemand Javascript oder HTML Code in dein Textfeld eingibt.
Damit kann ich spontan natürlich nicht viel anfangen, ...
// HTML Code
$html = <<<__HTML__
<div>
{TEXT}
</div>
__HTML__;
// oder aus einer Datei
$html = file_get_contents( 'template.html' );
// Liste mit Ersetzungen
$list = array(
'{TEXT}' => 'Hallo World!'
);
// ersetzen und anzeigen
echo str_replace( array_keys($list), array_values($list), $content);
Schau dir mal die Befehle: htmlentities() und nl2br() an.
Denke mal an Zeichen wie Ä,Ü und Ö - diese sollten auch in den entsprechenden HTML Code umgewandelt werden.
Warum denn das?
Wenn man ein Grundwissen von Zeichensätzen hat ist das nicht notwendig.
und diese Anwender werden bestimmt keine SQL Anweisungen über ein Formular ausführen.. ;)
Nö, aber evtl. Javascript. Das nennt sich dann XSS-Attacke und sowas zu vermeiden ist absolut trivial:
htmlspecialchars($input,ENT_COMPAT,'UTF-8');
Der Quelltext ließ mich vermuten, dass Zeilenumbrüche so dargestellt werden: "\n"
Werden sie ja auch.
Aber HTML stellt keine Zeilenumbrüche (und keine multiplen Leerzeichen) dar, wenn man sie nicht explizit via
<br/>
macht.Meine Frage: Gehts evt. noch besser? An der Stelle sollte ich vlt erwähnen, dass die Daten in einer Datenbank gespeichert werden. Obs wirklich so gut ist, wenn dort alles voller <br> Tags usw ist...
Den richtigen Tipp hat nxclass schon gegeben: nl2br()
Das sollte helfen: http://at2.php.net/manual/en/function.nl2br.php