mango: Text mit Zeilenumbruch mit javascript ausgeben

Hi,
ich kriege aus einer Datenbank Text mit Zeilenumbrüchen.
Dieser Teil wird mit php realisiert.

Dieser Text soll nun mit javascript in ein Textfeld gegeben werden.
Mit php gebe ich das aus:

  
echo '  
    <script language="javascript" type="text/javascript">  
    <!--  
    document.getElementById("inhalt").value="' . (nl2br($row->inhalt)) . '";  
    -->  
     </script>  
';

Was nun in html ausgegeben wird ist das folgendes:

  
<script language="javascript" type="text/javascript">  
    <!--  
    document.getElementById("inhalt").value="foo<br />  
<br />  
bar";  
    -->  
</script>  

Das heißt, der Text wird auf mehere Zeilen verteilt, in html gibt es ein Problem und der Text wird nicht angezeigt.

Wie kann ich das lösen?

Danke!!

  1. Hi,

    Was nun in html ausgegeben wird ist das folgendes:

    <script language="javascript" type="text/javascript">
        <!--
        document.getElementById("inhalt").value="foo<br />
    <br />
    bar";
        -->
    </script>

    
    > Das heißt, der Text wird auf mehere Zeilen verteilt, in html gibt es ein Problem und der Text wird nicht angezeigt.  
      
    Nein, das Problem gibt es in JavaScript - weil dort ein Textliteral nicht über Zeilengrenzen hinweg gehen darf.  
      
    Ersetze die Zeilenumbrüche serverseitig durch das Zeichen für einen JavaScript-Zeilenumbruch (oder gar nichts, denn BR in HTML wird ja schon einen bewirken).  
      
    MfG ChrisB  
      
    
    -- 
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    
    1. Hi,

      Nein, das Problem gibt es in JavaScript - weil dort ein Textliteral nicht über Zeilengrenzen hinweg gehen darf.

      um was wetten wir?

      Cheatah

      --
      X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
      X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
      X-Will-Answer-Email: No
      X-Please-Search-Archive-First: Absolutely Yes
      1. Hi,

        Nein, das Problem gibt es in JavaScript - weil dort ein Textliteral nicht über Zeilengrenzen hinweg gehen darf.

        um was wetten wir?

        Ja Schatz, ich hab' schon an dich gedacht, während ich das geschrieben habe ... ich weiß, es gibt wohl die Möglichkeit, das mit \ am Zeilenende zu machen(?), aber das war glaube ich nicht „offiziell“, die Diskussion hatten wir schon mal mit Mathias.

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        1. Hi,

          Ja Schatz, ich hab' schon an dich gedacht, während ich das geschrieben habe ...

          hach, so beginnen die besten Dialoge! Es erinnert mich an jenes glorreiche Ereignis:

          Sie: "Schatz, ich liebe Dich!"
          Er: "Jaja, Du mich auch."

          Der hierauf folgende Diskurs kann ein Weilchen dauern ...

          ich weiß, es gibt wohl die Möglichkeit, das mit \ am Zeilenende zu machen(?), aber das war glaube ich nicht „offiziell“, die Diskussion hatten wir schon mal mit Mathias.

          innerHTML ist ebenfalls nicht offiziell, aber dennoch (u.U.) empfehlenswert.

          Cheatah

          --
          X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
          X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
          X-Will-Answer-Email: No
          X-Please-Search-Archive-First: Absolutely Yes
          1. Hallo,

            hach, so beginnen die besten Dialoge! Es erinnert mich an jenes glorreiche Ereignis:
            Sie: "Schatz, ich liebe Dich!"
            Er: "Jaja, Du mich auch."

            aus deiner eigenen Erfahrung? ;-)

            Der hierauf folgende Diskurs kann ein Weilchen dauern ...

            Och, ich könnte mir ebensogut vorstellen, dass er ruck-zuck beendet ist. Und zwar endgültig.

            Ciao,
             Martin

            --
            Liebet eure Feinde - vielleicht schadet das ihrem Ruf.
            Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
            1. Hi,

              Sie: "Schatz, ich liebe Dich!"
              Er: "Jaja, Du mich auch."
              aus deiner eigenen Erfahrung? ;-)

              nein, mir fehlen keinerlei Gliedmaßen, aber danke für die Sorge ;-)

              Der hierauf folgende Diskurs kann ein Weilchen dauern ...
              Och, ich könnte mir ebensogut vorstellen, dass er ruck-zuck beendet ist. Und zwar endgültig.

              Och, wenn man es geschickt anstellt, kann das sicher ein erfüllter Abend sein *g*

              Cheatah

              --
              X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
              X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
              X-Will-Answer-Email: No
              X-Please-Search-Archive-First: Absolutely Yes
          2. Hi,

            Sie: "Schatz, ich liebe Dich!"
            Er: "Jaja, Du mich auch."

            Der hierauf folgende Diskurs kann ein Weilchen dauern ...

            Na ja, das ist ja auch 'ne mindestens zweideutige Antwort (und beide Versionen wird sie nicht mögen).

            ich weiß, es gibt wohl die Möglichkeit, das mit \ am Zeilenende zu machen(?), aber das war glaube ich nicht „offiziell“, die Diskussion hatten wir schon mal mit Mathias.

            innerHTML ist ebenfalls nicht offiziell, aber dennoch (u.U.) empfehlenswert.

            Sischer, sischer - aber stattdessen Zeilenumbrüche gegen \n auszutauschen, tut auch nicht weh; serverseitig generierter JS-Code, der nur Daten transportieren soll, muss nicht unbedingt lesbar sein, und wenn er doch mal anschließend manuell bearbeitet werden soll, dann sehe ich die Gefahr, dass bspw. eine Zeile „ergänzt“ wird - und dann leitet \ ggf. ein Steuerzeichen ein, und es gibt wieder einen Fehler, weil das Zeilenende dann nicht mehr stimmt ...

            MfG ChrisB

            --
            RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
            1. Hi,

              Der hierauf folgende Diskurs kann ein Weilchen dauern ...
              Na ja, das ist ja auch 'ne mindestens zweideutige Antwort (und beide Versionen wird sie nicht mögen).

              korrekt. Dabei fällt mir ein, dass ich mal 'ne Sammlung vernichtender Antworten beginnen sollte ... "Schönes Wetter da draußen!" - "Hier drinnen ist es aber auch nicht schlecht."

              Sischer, sischer - aber stattdessen Zeilenumbrüche gegen \n auszutauschen, tut auch nicht weh; serverseitig generierter JS-Code, der nur Daten transportieren soll, muss nicht unbedingt lesbar sein,

              Zustimmung, außer vielleicht während der Arbeit.

              und wenn er doch mal anschließend manuell bearbeitet werden soll, dann sehe ich die Gefahr, dass bspw. eine Zeile „ergänzt“ wird - und dann leitet \ ggf. ein Steuerzeichen ein, und es gibt wieder einen Fehler, weil das Zeilenende dann nicht mehr stimmt ...

              Dieses Problem sehe ich eher als marginal an, und mir ist das schon *verflucht* *oft* passiert ;-)

              Cheatah

              --
              X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
              X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
              X-Will-Answer-Email: No
              X-Please-Search-Archive-First: Absolutely Yes
        2. @@ChrisB:

          nuqneH

          ich weiß, es gibt wohl die Möglichkeit, das mit \ am Zeilenende zu machen(?)

          In CSS-Expressions mache ich davon gern Gebrauch, um den Quelltext übersichtlich zu haben.

          aber das war glaube ich nicht „offiziell“

          [ECMA-262], §7.8.4:

          LineContinuation :: \ LineTerminatorSequence

          Das sollte offiziell genug sein.

          Qapla'

          --
          Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
          (Mark Twain)
          1. Hi,

            [ECMA-262], §7.8.4:

            LineContinuation :: \ LineTerminatorSequence

            Das sollte offiziell genug sein.

            Ja, gut - wenn man dann auch von entsprechender Browser-Unterstützung ausgehen darf (wird wohl).

            MfG ChrisB

            --
            RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
            1. Hi,

              Ja, gut - wenn man dann auch von entsprechender Browser-Unterstützung ausgehen darf (wird wohl).

              ich kann nicht für Browser vor dem IE 5.0 sprechen[1], aber mindestens seit diesem Mistviech ist mir noch nichts untergekommen, was es nicht implementiert hätte. Und ich habe eine ziemlich sorgfältige QS-Abteilung im Rücken, die sich schon bei mir gemeldet hätte, wenn gewisse Werbeformen in unseren Diensten nicht mehr funktionieren würden :-)

              Cheatah

              [1] Für IE 5.2 Mac weiß ich es gerade nicht.

              --
              X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
              X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
              X-Will-Answer-Email: No
              X-Please-Search-Archive-First: Absolutely Yes
          2. Hi!

            aber das war glaube ich nicht „offiziell“
            [ECMA-262], §7.8.4:
            LineContinuation :: \ LineTerminatorSequence
            Das sollte offiziell genug sein.

            Und dazu die Bemerkung vor dem Absatz 7.8.5 nicht übersehen:

            NOTE A line terminator character cannot appear in a string literal, except as part of a LineContinuation to produce the empty character sequence. The correct way to cause a line terminator character to be part of the String value of a string literal is to use an escape sequence such as \n or \u000A.

            Lo!

            1. @@dedlfix:

              nuqneH

              Und dazu die Bemerkung vor dem Absatz 7.8.5 nicht übersehen:

              NOTE A line terminator character cannot appear in a string literal, except as part of a LineContinuation to produce the empty character sequence. The correct way to cause a line terminator character to be part of the String value of a string literal is to use an escape sequence such as \n or \u000A.

              Das hatte ich zuerst gefunden, als ich nach "escape" gesucht hatte. Dann nach "LineContinuation" gesucht …

              Qapla'

              --
              Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
              (Mark Twain)
  2. Hallo!

    echo '
        <script language="javascript" type="text/javascript">
        <!--
        document.getElementById("inhalt").value="' . (nl2br($row->inhalt)) . '";
        -->
         </script>
    ';

      
    Folgendes sollte Dir die Zeilenumbrüche entfernen.  
      
    ~~~php
      
    echo '  
        <script language="javascript" type="text/javascript">  
        <!--  
        document.getElementById("inhalt").value="' . (preg_replace("/\r\n|\n/", '', nl2br($row->inhalt))) . '";  
        -->  
         </script>  
    ';  
    
    

    André

    --
    Die Frau geht, die Hilti bleibt!
    1. Moin!

      Folgendes sollte Dir die Zeilenumbrüche entfernen.

      ...

      Ich glaube, folgende wäre billiger:

        
       echo '  
           <script language="javascript" type="text/javascript">  
           <!--  
           document.getElementById("inhalt").value="' . (preg_replace("/\r\n|\n/", '<br>', $row->inhalt))  '";  
           -->  
            </script>  
       ';  
       
      

      P.S. Hatte old macintosh nicht mal "\r" als Zeilenumbruch?

      MFFG (Mit freundlich- friedfertigem Grinsen)

      fastix

      1. @@fastix®:

        nuqneH

        <script language="javascript" type="text/javascript">
             <!--
             document.getElementById("inhalt").value="' . (preg_replace("/\r\n|\n/", '<br>', $row->inhalt))  '";
             -->
              </script>

        Die HTML-Auskommentierung von JavaScript-Code ist bestenfalls unsinnig, womöglich auch falsch.

        Qapla'

        --
        Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
        (Mark Twain)
      2. Hi!

        Folgendes sollte Dir die Zeilenumbrüche entfernen.

        Stimmt, aber ...

        document.getElementById("inhalt").value="' . (preg_replace("/\r\n|\n/", '<br>', $row->inhalt))  '";

        ... ich glaube nicht, dass nun stattdessen <br> auftauchen sollen. Richtig wäre '\n', also von PHP nicht aufgelösten Zeichen \ und n, die einen Zeilenumbruch in Javascript repräsentieren. HTML, das in Javascript-Strings steht, wird nicht aufgelöst sondern Zeichen für Zeichen wie alle anderen auch behandelt.

        Bitte prüft eure "Lösungen", bevor ihr sie hier postet! (Oder beschränkt euch auf eine Erklärung.)

        P.S. Hatte old macintosh nicht mal "\r" als Zeilenumbruch?

        So alte Macs werden vermutlich nicht als Webserver eingesetzt.

        Lo!