HTML Anfänger: Zeilenumbrüche

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?

  1. 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

    --
    Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
    Terry Pratchett, "Wachen! Wachen!"
    ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
    Veranstaltungsdatenbank Vdb 0.3
    1. 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.

  2. 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

    --
    Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/
    1. 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.

  3. 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.

    --
    “All right, then, I'll go to hell.” – Huck Finn
    1. 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.

      1. 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

        --
        Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Dump und Dumper.

    2. @@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'

      --
      „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)