Patrick: Text mit \n übernehmen

Hi Forum,

ich habe eine Javascript-Funktion, welche aus einem Popup einen Text in eine Textarea des öffnenden Fensters schreiben soll.
Soweit funktioniert das mit normalen input type=text.
Ich gehe davon aus, das mein Script das nicht übernimmt, weil im zu übernehmenden Text \n vorkommt.

Was kann ich da tun?

Vielen Dank
Patrick

  1. Hi,

    Ich gehe davon aus, das mein Script das nicht übernimmt, weil im zu übernehmenden Text \n vorkommt.

    warum gehst Du davon aus?

    Was kann ich da tun?

    Uns erst mal verraten, was Du überhaupt machst.

    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 nochmal,

      ich habe eine Artikelauswahl in einem Popup.
      Wenn ich dieses aufrufe, kann ich mir einen Artikel aussuchen und dieser soll per Klick in meine Felder aus dem öffnenden Fenster übernommen werden.
      Die Fuktion sieht so aus:

      var a = "<? echo $row["produktnummer"];?>";
      var b = "<? echo $row["produktname"];?>";
      var c = "<? echo $row["produkttext"];?>";

      opener.document.forms["formular1"].elements["artno"].value = a;
      opener.document.forms["formular1"].elements["artname"].value = b;
      opener.document.forms["formular1"].elements["arttext"].value = c;

      Diese wird dynamisch aufgerufen.
      Für a und b habe ich nur einzeilige Textfelder. C jedoch ist ein Textarea und steht auch so in der Datenbank drin.

      Wenn ich c mit aufrufe, funktioniert es nicht. Ohne c schon.

      Grüße
      Patrick

      1. Hell-O!

        var a = "<? echo $row["produktnummer"];?>";
        var b = "<? echo $row["produktname"];?>";
        var c = "<? echo $row["produkttext"];?>";

        Bitte poste Beispieldaten, so wie sie beim Client ankommen.

        opener.document.forms["formular1"].elements["artno"].value = a;
        opener.document.forms["formular1"].elements["artname"].value = b;
        opener.document.forms["formular1"].elements["arttext"].value = c;

        Sieht erstmal unproblematisch aus.

        Diese wird dynamisch aufgerufen.

        Was bedeutet, dass ... ?

        Wenn ich c mit aufrufe, funktioniert es nicht. Ohne c schon.

        Wie äußert sich das "Nichtfunktionieren"? Gibt es Fehlermeldungen?

        Siechfred

        --
        Ich bin strenggenommen auch nur interessierter Laie. (molily)
        Kabelkuddelmuddel || Steuerfreie Geburtsbeihilfen?  || RT 221 Erfurt-Altstadt i.V.
        1. Hallo,

          var a = "<? echo $row["produktnummer"];?>";
          var b = "<? echo $row["produktname"];?>";
          var c = "<? echo $row["produkttext"];?>";
          Bitte poste Beispieldaten, so wie sie beim Client ankommen.

          ACK.

          [...]
          Sieht erstmal unproblematisch aus.

          Nein, ganz und gar nicht. Vor allem der obere Block mit den Zuweisungen nicht. Da Patrick sagt, der Produkttext könne auch '\n' enthalten, würde ich vor allem an der Stelle gern den clientseitigen Quelltext sehen. Ich verwette mein Mittagessen darauf, dass da im JS-Source etwas in der Art steht:

          var c = "Hier kann eine ausführliche
          Beschreibung des Artikels stehen, die
          auch mal mehrere Zeilen umfasst.";

          Und das wäre natürlich Asche. Da wird Patrick nicht drumherumkommen, die Zeilenumbrüche schon im PHP-Code geeignet zu codieren, so dass sie im JS-Quellcode korrekt erscheinen bzw. korrekt interpretiert werden können.

          Wie äußert sich das "Nichtfunktionieren"? Gibt es Fehlermeldungen?

          Sollte es wohl.
          Und die Textfelder für a und b werden auch nicht mehr befüllt?

          So long,
           Martin

          --
          Frauen sind wie Elektrizität: Fasst man sie an, kriegt man eine gewischt.
          1. Hell-O!

            Ich verwette mein Mittagessen darauf, dass da im JS-Source etwas in der Art steht:

            Ähm, ich würde ja mithalten, aber
            1. Hast du wohl Recht und
            2. Gibt's bei mir kein Mittagessen.

            ;-)

            Siechfred

            --
            Ich bin strenggenommen auch nur interessierter Laie. (molily)
            Kabelkuddelmuddel || Steuerfreie Geburtsbeihilfen?  || RT 221 Erfurt-Altstadt i.V.
          2. Hi Martin,

            genau das, was da unten steht kommt raus.

            Also, muss ich das dann codieren?

            Nein, ganz und gar nicht. Vor allem der obere Block mit den Zuweisungen nicht. Da Patrick sagt, der Produkttext könne auch '\n' enthalten, würde ich vor allem an der Stelle gern den clientseitigen Quelltext sehen. Ich verwette mein Mittagessen darauf, dass da im JS-Source etwas in der Art steht:

            var c = "Hier kann eine ausführliche
            Beschreibung des Artikels stehen, die
            auch mal mehrere Zeilen umfasst.";

            Nein, keine Fehlermeldung, das Script macht nur einfach nix

            Wie äußert sich das "Nichtfunktionieren"? Gibt es Fehlermeldungen?

            Also, die Umbrüche per PHP rausschmeissen?

            Danke
            Patrick

            1. Hallo Patrick,

              genau das, was da unten steht kommt raus.

              Dacht' ich mich doch. Glück gehabt, dann ist mein Mittagessen ja gerettet. ;-)

              Also, muss ich das dann codieren?

              Ja. Versuche, die Sache von hinten aufzudröseln. Du willst, dass die Zeichenfolge '\n' direkt so im Javascript-Quelltext steht, also erst der Backslash, dann ein n. Also musst du schon im PHP-Script dafür sorgen, dass anstatt eines Zeilenumbruchs genau diese beiden Zeichen im String stehen.
              Ersetze also die Zeichenfolgen "\r\n" und "\n" durch "\n". Der doppelte Backslash nimmt ihm hier seine Sonderbedeutung. Es müsste auch funktionieren, wenn du den Ersatzstring '\n' notierst, also mit einem einfachen Backslash in einfachen Anführungszeichen. Strings in '' werden AFAIR in PHP nicht auf Sonderzeichen untersucht.

              Nein, keine Fehlermeldung, das Script macht nur einfach nix

              Das kann nicht sein. Diese Fehler ergibt nach meinen Tests sogar im IE die Fehlermeldung "nicht abgeschlossene Zeichenfolgenkonstante". Und Opera oder FF sind da traditionell noch viel auskunfstfreudiger.

              Ciao,
               Martin

              --
              Lieber blau machen, als sich schwarz ärgern.
              1. Hi Martin,

                du bist mein Mann fürs Grobe ;-)
                Hat genau so funktioniert!!
                Vielen Dank

                Patrick

  2. Hi.
    Ich kenne das Problem wenn es darum geht Eingaben in einer Textarea über das HTTP-Request-Objekt an den Server zu schicken. Im JS gehen die \r\n flöten, daher ersetze ich die vorher mit [BR]

    text-in-textarea.replace(/\r\n/g, '[BR]');

    Vielleicht hilft das ja.

    mfg
    Knusperklumpen

    1. Hello out there!

      Im JS gehen die \r\n flöten,

      Nein, tun sie nicht:

      <pre>  
        <script type="text/javascript">  
          [code lang=javascript]document.write("<p>Lorem ipsum\r\ndolor sit amet.</p>");
      

      </script>
      </pre>[/code]

      Die Zeilenumbrüche gehen beim Rendern flöten, weil ein Whitespace (außer bei 'white-space: pre') genauso wirkt wie das andere (<http://de.selfhtml.org/html/allgemein/editieren.htm@title=Regeln beim Editieren von HTML>, letzter Punkt).

      daher ersetze ich die vorher mit [BR]

      Du meinst '<BR>'?

      See ya up the road,
      Gunnar

      --
      “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
      1. Hi.

        Gut, ich gebe dir recht, im JS verschwinden sie nicht, aber dann eben bei der Übergabe an den Server über HTTP-Request (Ajax).
        Daher replace ich es ... und weil ich serverseitig die Eingaben nach unerwünschtem HTML abgrase ersetze ich durch [BR], damit das nicht wieder rausgekickt wird.

        mfg
        Knusperklumpen

        1. Gut, ich gebe dir recht, im JS verschwinden sie nicht, aber dann eben bei der Übergabe an den Server über HTTP-Request (Ajax).

          auch das tun sie nicht, du musst sie nur, wie alle Sonderzeichen, escapen

          Daher replace ich es ...

          Die Funktion escape() bzw. encodeURI() gehören zum Umfang der üblichen Browserfunktionen. Du musst dir also nichts selber basteln.

          Struppi.

          --
          Javascript ist toll (Perl auch!)
  3. Ich gehe davon aus, das mein Script das nicht übernimmt, weil im zu übernehmenden Text \n vorkommt.

    Nicht weil es im Text vorkommt, sondern weil du den Zeilenumbruch vermutlich zum Browser schickst.

    var text = "mit\nZeilenumbruch";

    Funktioniert

    Was kann ich da tun?

    dafür sorgen, dass es genauso im Browser ankommt.

    Struppi.

    --
    Javascript ist toll (Perl auch!)