Zeilenumbrüche
HTML Anfänger
- php
Hallo,
in meiner Datenbank habe ich Text stehen, dieser geht über mehrere Zeilen die mit einem Enter getrennt sind. Wenn ich es ausgebe
<?php echo htmlspecialchars($user_eingabe); ?>
sehe ich davon leider nichts. Nutzte ich nl2br macht er mir solche Zeichen rein <br /> aber diese werden nur ausgegeben und bewirken keinen Umbruch. Das htmlspecialchars benötige ich doch, dass mir nichts "böses" ausgegeben wird?
Hallo
in meiner Datenbank habe ich Text stehen, dieser geht über mehrere Zeilen die mit einem Enter getrennt sind. Wenn ich es ausgebe
<?php echo htmlspecialchars($user_eingabe); ?>
sehe ich davon leider nichts. Nutzte ich nl2br macht er mir solche Zeichen rein <br /> aber diese werden nur ausgegeben und bewirken keinen Umbruch.
Das ist, so wie du es beschreibst, klar.
Das htmlspecialchars benötige ich doch, dass mir nichts "böses" ausgegeben wird?
htmlspecialchars macht genau das, was es mit HTML-Tags zu tun hat, es entschärft sie. Wenn du nun nl2br vor htmlsecialchars ausführst, werden auch die Umbruch-Tags entschärft. Hier kommt es also auf die Reihenfolge an. Funktionen werden zeilenweise oder bei Schachtelungen von innen nach außen ausgeführt.
<?php
$user_eingabe = htmlspecialchars($user_eingabe);
$user_eingabe = nl2br($user_eingabe);
echo $user_eingabe;
?>
… und …
<?php echo nl2br(htmlspecialchars($user_eingabe)); ?>
… sind funktionsgleich. Zuerst werden eventuell vorhandene unerwünschte Zeichen maskiert und danach die erwünschten Umbrüche eingefügt.
Tschö, Auge
Hallo Auge,
vielen vielen lieben Dank für deine sehr ausführliche Erklärung. Hab es nun geändert und es funktioniert so wie ich es wollte.
Hi,
in meiner Datenbank habe ich Text stehen, dieser geht über mehrere Zeilen die mit einem Enter getrennt sind. Wenn ich es ausgebe
<?php echo htmlspecialchars($user_eingabe); ?>
sehe ich davon leider nichts.
Natürlich nicht, weil per Default in HTML sämtlicher White Space in der Anzeige zu einem Space zusammengefasst wird.
Nutzte ich nl2br macht er mir solche Zeichen rein <br /> aber diese werden nur ausgegeben und bewirken keinen Umbruch. Das htmlspecialchars benötige ich doch, dass mir nichts "böses" ausgegeben wird?
Dann denk mal über die Reihenfolgen nach, in der sich diese zwei Funktionen anwenden lassen.
MfG ChrisB
Hallo ChrisB,
Dann denk mal über die Reihenfolgen nach, in der sich diese zwei Funktionen anwenden lassen.
danke dir für deine Antwort. Wie Auge schon geschrieben hat, muss ich von Innen nach Außen lesen, das habe ich nun geändert und es funktioniert so wie es wollte.
Hakuna matata!
in meiner Datenbank habe ich Text stehen, dieser geht über mehrere Zeilen die mit einem Enter getrennt sind.
nl2br
stammt direkt aus Teufels Küche. Zeilenumbrüche mit <br>
sind nur da angebracht, wo der Zeilenumbruch eine wichtige Rolle spielt, zum Beispiel in Gedichten und Liedtexten. In normalen Fließtexten haben die nichts zu suchen.
In deinem Fall handelt es sich um vorformatierten Text, speziell für diesen Fall gibt es das HTMLElement <pre>
. Darin solltest du deinen Text einschließen.
Die Browser sind so voreingestellt, dass Zeilenumbrüche und Formatierungen, die innerhalb der <pre>-Tags stehen, erhalten bleiben. Du kannst es aber auch ausdrücklich mit der CSS Regel pre { white-space: pre }
machen.
Hallo,
danke für deine Antwort, ich bin ehrlich gerade etwas verwunder.
In deinem Fall handelt es sich um vorformatierten Text, speziell für diesen Fall gibt es das HTMLElement
<pre>
. Darin solltest du deinen Text einschließen.
Wir reden von solchen Absätzen wie auch hier im Forum, wenn ich z.B. Enter drücke um in eine neue Zeile zu springen wird doch im Hintergrund automatisch ein <br> eingefügt?
Also zumindest ist es so wenn ich den TinyMCE Editor nutzte.
Om nah hoo pez nyeetz, HTML Anfänger!
Wir reden von solchen Absätzen wie auch hier im Forum, wenn ich z.B. Enter drücke um in eine neue Zeile zu springen wird doch im Hintergrund automatisch ein <br> eingefügt?
Hier in dem Forum ist das so. Im Nachfolgeforum werden verschiedene Absätze auch als verschiedene Absätze dargestellt.
Siehe http://wiki.selfhtml.org/wiki/Br und dort „Das br-Element sollte ausschließlich für Zeilenumbrüche, die Bestandteil des Inhalts sind, genutzt werden. Beispiele für die korrekte Anwendung sind Zeilenumbrüche in Gedichten oder Adressen.“
Alles andere sind oft aufeinander folgende Absätze, siehe http://wiki.selfhtml.org/wiki/P.
Matthias
@@1UnitedPower:
nuqneH
nl2br
stammt direkt aus Teufels Küche. Zeilenumbrüche mit<br>
sind nur da angebracht, wo der Zeilenumbruch eine wichtige Rolle spielt
Von „angebracht“ würde ich auch da nicht sprechen. Angebracht wäre ein Element, das den Inhalt (die Zeile) auszeichnet, nicht eins für die Lücke dazwischen.
Dass solch ein l-Element in XHTML 2 vorgesehen war, war wohl für Hixie Grund genug, es für HTML5 nicht vorzusehen. https://twitter.com/g16n/status/509234788386230273 ff.
Deshalb <br>
, was nicht weniger „direkt aus des Teufels Küche“ stammt.
Alternative: <span class="line">
. Oder custom element <x-line>
. Oder auf Validität s^Dpfeifen („willful violation“ in HTML5-Sprech) und <l>
verwenden. Mit .line, x-line, l {display: block}
Qapla'