Zeilenumbruch in der Browserausgabe

  • Hallo Arne ,

    ich hab nl2br(

    text text text text text text text text text text text text

    text text text text text text text text text text text text

    text text text text text text text text text text text text

    text text text text text text text text text text text text

    text text text text text text text text text text text text

    text text text text text text text text text text text text)

    ausprobiert, aber es wird nichts ausgegeben, also insgesamt hab ich


    <!DOCTYPE html>

    <!--

    To change this license header, choose License Headers in Project Properties.

    To change this template file, choose Tools | Templates

    and open the template in the editor.

    -->

    <html>

    <head>

    <title>TODO supply a title</title>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    </head>

    <body>

    <div><script>


    document.write ('Hallo Welt. <br> ');


    document.write ('Welcome to this site!');

    str.replace(/\n|\r/g, "<br>");

    htmlstring = stringContainingNewLines.replace(/(\r\n|\n|\r)/gm, "<br>");

    nl2br( text text text text text text text text text text text text

    text text text text text text text text text text text text

    text text text text text text text text text text text text

    text text text text text text text text text text text text

    text text text text text text text text text text text text

    text text text text text text text text text text text text);

    </script></div>

    </body>

    </html>

  • HTML wird wohl nichts werden, das ist keine Programmiersprache, weil es keine Logik besitzt.

    Aber für JavaScript scheint es Ansätze zu geben: https://stackoverflow.com/ques…-equivalent-in-javascript


    ...wobei eine einfache Ersetzung für Dich vermutlich auch ausreichen würde.

    Ah, vielen Dank. Ich habs ausprobiert, es geht momentan nicht. Muss ich den Code in bestimmten Tags schreiben? Und wäre es egal,

    ob es vor oder nach dem Text steht?

    Gruß,

    Scratchy

  • Hallo Sempervivum,

    dies ist mein ursprünglicher Code:


    <!DOCTYPE html>

    <!--

    To change this license header, choose License Headers in Project Properties.

    To change this template file, choose Tools | Templates

    and open the template in the editor.

    -->

    <html>

    <head>

    <title>TODO supply a title</title>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    </head>

    <body>

    <div><script>


    document.write ('Hallo Welt. <br> ');


    document.write ('Welcome to this site!');

    str.replace(/\n|\r/g, "<br>");

    htmlstring = stringContainingNewLines.replace(/(\r\n|\n|\r)/gm, "<br>");

    //nach jeder Zeile <br> schreiben bzw einschliessen <br>Zeile</br>

    //<p> Absaetze so umschliessen </p>

    </script></div>

    </body>

    </html>


    und dies mein Versuch mit dem Tipp von Arne (amerikanisches Forum siehe Link):


    <!DOCTYPE html>

    <!--

    To change this license header, choose License Headers in Project Properties.

    To change this template file, choose Tools | Templates

    and open the template in the editor.

    -->

    <html>

    <head>

    <title>TODO supply a title</title>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    </head>

    <body>

    <div><script>

    function nl2br (str, is_xhtml) {

    if (typeof str === 'undefined' || str === null) {

    return '';

    }

    var breakTag = (is_xhtml || typeof is_xhtml === 'undefined') ? '<br />' : '<br>';

    return (str + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1' + breakTag + '$2');

    }

    document.write ('Hallo Welt.\n\

    Welcome to this site');


    document.write ('Welcome to this site!');

    str.replace(/\n|\r/g, "<br>");

    htmlstring = stringContainingNewLines.replace(/(\r\n|\n|\r)/gm, "<br>");

    //nach jeder Zeile <br> schreiben bzw einschliessen <br>Zeile</br>

    //<p> Absaetze so umschliessen </p>

    function nl2br (str, is_xhtml) {

    if (typeof str === 'undefined' || str === null) {

    return '';

    }

    var breakTag = (is_xhtml || typeof is_xhtml === 'undefined') ? '<br />' : '<br>';

    return (str + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1' + breakTag + '$2');

    }

    </script></div>

    </body>

    </html>

  • Dazu ist folgendes zu sagen:


    Dies verursacht einen Syntaxfehler:

    Code
    document.write('Hallo Welt.\n\
    
    Welcome to this site');

    Es ist in der Tat möglich, einen String über Zeilenumbrüche hinweg zu definieren, wenn man Backslash verwendet, insofern bist Du schon auf dem richtigen Weg. Allerdings zählt die Leerzeile mit und müsste ebenfalls mit Backslash abgeschlossen sein. D. h. dies wäre richtig:

    Code
    document.write('Hallo Welt.\n\
    \
    Welcome to this site');

    oder dies ohne Leerzeile:

    Code
    document.write('Hallo Welt.\n\
    Welcome to this site');


    Weiter sind hier:

    Code
    str.replace(/\n|\r/g, "<br>");
    
    htmlstring = stringContainingNewLines.replace(/(\r\n|\n|\r)/gm, "<br>");

    die Variablen str und stringContainingNewLines undefiniert, wenn ich das richtig überblicke.


    Dann ist die Funktion nl2br zwei Mal definiert. Stackoverflow ist zuverlässig und diese Funktion wird funktionieren, wenn Du sie richtig anwendest.


    Außerdem hat man dir wahrscheinlich schon empfohlen, auf document.write() zu verzichten und ich möchte mich dem anschließen.


    Weiter verstehe ich dein Vorhaben nicht: Das Newline in <br> umzuwandeln macht nur Sinn, wenn Du einen längeren Text hättest mit zahlreichen Newlines drin. Und so etwas kann ich in dem Code in deinem letzten Posting nicht finden.

  • Hallo Sempervivum,

    Danke für Deine Kommentare,

  • oK; also ich habe mal die Tipps folgendermassen umgesetzt:


    PS:es funktioniert noch nicht ;)

  • nichts ;)

  • Falls gemeint war, was ich mir je Codefragment versprach:

    Mit

    Code
    ('Hallo Welt.\n\
    Welcome to this site');


    Das doofe ist natürlich das ich die Funktion nicht selbst geschrieben habe, sondern aus dem Forum habe, ich bin mir auch nicht ganz sicher, ob ich sie richtig verstehe: soweit ich das erkennen kann, werden alle möglichen Zeilenumbruchsbefehle, also /([^>\r\n]?)(\r\n|\n\r|\r|\n|\n\)/g durch

    <br> ersetzt. (Ich hatte das zuvor selbst probiert, das steht als Kommentar danach, mein eigener Versuch.)

    .

    Also in Netbeans wird bei jeder Entereingabe automatisch \n\ geschrieben.

    Falls gemeint war, dass ich nun <br> stattdessen schreiben sollte, dann werde ich es abändern.

    Im Moment versteh ichs noch nicht.

  • Allerdings zählt die Leerzeile mit und müsste ebenfalls mit Backslash abgeschlossen sein. D. h. dies wäre richtig:

    Code
    document.write('Hallo Welt.\n\
    \
    Welcome to this site');

    oder dies ohne Leerzeile:

    Code
    document.write('Hallo Welt.\n\
    Welcome to this site');


    oder man schreibt es in einer Zeile


    Code
    document.write('Hallo Welt. <br> Welcome to this site');
  • Hallo Basti,

    ja das verstehe ich. Aber ich habe doch extra die Funktion mit einbauen wollen, die alles ersetzen soll und zwar automatisch. Das Problem ist nur, dass sie nicht funktioniert. Leider bin ich Anfänger und weiss nicht wo der Fehler liegt


    1. function nl2br (str, is_xhtml) {
    2. if (typeof str === 'undefined' || str === null) {
    3. return '';
    4. }
    5. var breakTag = (is_xhtml || typeof is_xhtml === 'undefined') ? '<br />' : '<br>';
    6. return (str + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n|\n\)/g, '$1' + breakTag + '$2');
    7. }

    müsste dann nicht,

    \n\ ersetzt werden durch <br> ?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!