Der Martin: DB -> JS -> Textarea

Beitrag lesen

Hallo,

Und ich stelle das in HTML einfach 1:1 wie aus der DB dar, also ohne nl2br().

ich gewinne so langsam den Eindruck, dass du das eben nicht ins HTML schreibst, sondern mit PHP ein Stück Javascript erzeugst.

Das onclick-event selber hat verschiedene Parameter, unter anderem eben javascript_escape($bemerkungen). Und da Bemerkungen in der DB mehrzeilig sein können, muss ich mich um die Zeilenumbrüche irgendwie "kümmern), denn wennn ich sie "raw" übergebe, erhalte ich einen JS-Fehler.

Dann verrate uns bloß nicht, was für einen. Wahrscheinlich einen gewöhnlichen Syntaxfehler.

Edit:

Habe festgestellt, dass der Parameter anstelle der Zeilenumbrüche jeweils Doppelshlash n enthält.

Und wo kommt das wieder her?

Wenn ich die Funktio9n nun wie folgt umbaue, dann werden die Zeilenumbrüche in der Textarea korrekt dargestellt.

Kommentare von mir ergänzt.

function javascript_escape($value)
{
    return strtr((string)$value,array(
        "'" => '\\\'',   // ersetzt Single Quote durch Backslash, Single Quote
        '"' => '\"',     // ersetzt Double Quote durch Backslash, Double Quote
        '\\' => '\\\\',  // ersetzt Backslash durch zweimal Backslash
        "\n" => '\n',    // ersetzt Linefeed durch Backslash, n
        "\\n" => '\n',   // ersetzt Backslash, n durch Backslash, n - WTF??
        "\r" => '\r',    // ersetzt Zeilenumbruch durch Backslash, r
        "\t" => '\t',    // ersetzt Tabulator durch Backslash, t
        chr(12) => '\f', // ersetzt Seitenvorschub durch Backslash, f - wer benutzt sowas?
        chr(11) => '\v', // ersetzt Vertical Tab durch Backslash, v - wer benutzt denn das?
        chr(8) => '\b',  // ersetzt Backspace durch Backslash, b
    ));
}

Die Funktion ersetzt also einige der üblichen Verdächtigen, die in Strings Ärger machen können, durch die gängigen C- oder PHP-Escape-Sequenzen. Nur die Ersetzung, die du noch hinzugefügt hast, ergibt absolut keinen Sinn - es sei denn, da ist irgendwo noch mehr Magic Code, den wir nicht kennen, und der vorher schon irgendwas kaputtmacht.

Frage an die Datenbank-Fachleute: Liefert die mysqli-Schnittstelle echte Linefeeds oder auch schon die Escape-Sequenz Backslash, n?

Einen schönen Tag noch
 Martin

--
"Was sind denn das für Beeren?" - "Das sind Blaubeeren." - "Warum sind sie dann rot?" - "Weil sie noch grün sind."