martin: Zeilenumbrüche in Textarea lassen JS bei der Ausgabe abstürzen

Hallo alle zusammen,

ich habe folgendes Problem:

Ein Text wird in ein Textfeld eingeben:
<textarea name="comment" cols="37" id="comment"></textarea>

Dieser Text wird folgendermaßen maskiert und in einer DB gespeichert:
$comment = htmlentities($_POST['comment']);

Ausgegeben wird er in einm Tooltip:
onmouseover="return escape('<?=$row['comment']?>')"

soweit so gut. Jetzt passiert folgendes:
Sobald mein Text aus dem Textfeld ein Eingabefeld enthält,
geht gar nichts mehr. Das JavaScript "kracht" und gibt gar nichts mehr aus. Sonderzeichen, Anführungszeichen etc. machen keine Probleme,
aber wehe ich drücke in meinem Textfeld bei der Eingabe mal auf Enter, geht gar nichts mehr.

ich hab schon alles mögliche versucht, von einem Filtern von "\n\r" (arbeite auf einem Linuxsystem), bis hin zu nl2br() vor der Ausgabe über stripslashes, addslashes, aber es geht nix.

Ein Zeilenumbruch, und nix klappt mehr.
Ich habe sogar schon versucht mit wrap="off" als Attribut in der Textarea was zu reißen, aber auch das hilft nicht (FF sollte das wrap="off" verstehen, lt. selfhtml)

weiß irgendwer von euch rat?
hat jemand eine idee, was da los sein könnte?!?

vielen dank im voraus,
grüße,
martin

  1. hi,

    Sobald mein Text aus dem Textfeld ein Eingabefeld enthält,
    geht gar nichts mehr. Das JavaScript "kracht" und gibt gar nichts mehr aus. Sonderzeichen, Anführungszeichen etc. machen keine Probleme,
    aber wehe ich drücke in meinem Textfeld bei der Eingabe mal auf Enter, geht gar nichts mehr.

    korrekt - literale dürfen in javascript nicht über zeilengrenzen hinweg gehen

    ich hab schon alles mögliche versucht, von einem Filtern von "\n\r" (arbeite auf einem Linuxsystem), bis hin zu nl2br() vor der Ausgabe über stripslashes, addslashes, aber es geht nix.

    das ist eine ziemlich vage beschreibung.
    was genau hast du denn versucht?

    zeilenumbrüche werden je nach system anders dargestellt, manche nutzen \r\n, manche nur \n, manche nur \r.
    am zweckmässigsten wäre es also wohl, mit einem kleinen regulären ausdruck sowohl \r als auch \n zu matchen, und durch "\n" (bzw. '\n' - innerhalb einfacher hochkommata werden ja keine sonderzeichen interpretiert) zu ersetzen - so dass in der ausgabe, die du erzeugst, nachher wirklich ein \ gefolgt von einem n steht, und dabei aber der ganze string in einer zeile.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. Hi,

    Ausgegeben wird er in einm Tooltip:
    onmouseover="return escape('<?=$row['comment']?>')"

    ich verstehe nicht ganz was Du da machst. Wie erzeugst Du das Tooltip?

    Was steht im Quelltext?
    Etwa:
    onmouseover="return escape('foo
                                bar
                                lala')"?

    Gruesse, Joachim

    --
    Am Ende wird alles gut.