quotemeta() mit JavaScript un-quote
Perlhuhn
- perl
hallo,
die Perl-Funktion quotemeta() setzt ein escape auf bestimmte Sequenzen, zb. CR, CRLF u.a., d.h., die Sequenzen bekommen einen Backslash vorangestellt.
So escaped betanke ich übers Template ein Objekt im DOM. JS jedoch scheint den Backslash zu ignorieren, meine bisherigen Versuche, einen maskierten CR per JS.replace() zurückzuholen, greifen leider nicht. Als Workaround habe ich eine eigene Sequenz für den CR eingebaut, das ist jedoch unschön.
Schöner wäre eine JS-Funktion, die das Escaping einfach wieder rückgängig macht, gibt es sowas?
Oder was Anderes? Oder auch nicht ;)
--Legehennenexperte
Hi,
die Perl-Funktion quotemeta() setzt ein escape auf bestimmte Sequenzen, zb. CR, CRLF u.a., d.h., die Sequenzen bekommen einen Backslash vorangestellt.
meinst du eine Funktion, die ein "echtes" \n in die zwei Zeichen Backslash, Kleinbuchstabe 'n' umwandelt?
So escaped betanke ich übers Template ein Objekt im DOM. JS jedoch scheint den Backslash zu ignorieren
Woraus schließt du das? Wenn du den String "Heute back ich\nMorgen brau ich" tatsächlich mit der Zeichenfolge Backslash, Kleinbuchstabe 'n' im Javascript-Kontext an den Client schickst, wird Javascript dort auch einen Zeilenumbruch (CR, 0x0D oder \n) erkennen.
meine bisherigen Versuche, einen maskierten CR per JS.replace() zurückzuholen, greifen leider nicht.
Nein, weil zu der Zeit, wo dein Javascript ausgeführt wird, kein maskiertes Zeichen mehr existiert (außer im Quellcode), sondern ein echter Zeilenumbruch.
Als Workaround habe ich eine eigene Sequenz für den CR eingebaut, das ist jedoch unschön.
Mir scheint, du versuchst ein Problem zu lösen, das gar nicht existiert.
Schöner wäre eine JS-Funktion, die das Escaping einfach wieder rückgängig macht, gibt es sowas?
Ja, das macht der Browser von ganz allein beim Parsen des empfangenen Quellcodes.
So long,
Martin
PS: Der Beitrag wäre im Themenbereich JAVASCRIPT passender angesiedelt als in PERL.
danke für Deine Mühe,
Mir scheint, du versuchst ein Problem zu lösen, das gar nicht existiert.
Wenn ich die \n drinlasse, geht es bereits bei der Zuweisung schief, im Browser sieht das so aus:
val_plain = "Zeile1
Zeile2
";
Einziger Weg, den ich sehe und der auch funktioniert: Ich ersetze für diese Zuweisung die CRLF durch jeweils ein %0A. Die Perl-Funktion quotemeta() lasse ich weg.
Dann sehe ich im DOM, dass die Zuweisung ok ist. Und mit
decodeURIComponent(val_plain);
hole ich die \n zurück. Eine andere Möglichkeit sehe ich nicht. Du vielleicht?
Legehennenexperte
Hallo,
Mir scheint, du versuchst ein Problem zu lösen, das gar nicht existiert.
Wenn ich die \n drinlasse, geht es bereits bei der Zuweisung schief, im Browser sieht das so aus:
val_plain = "Zeile1
Zeile2
";
dann gibst du tatsächlich das Zeichen "Linefeed", also \n oder 0x0A an den Client aus, nicht die Zeichenfolge Backslash, Kleinbuchstabe 'n' - sorry, in meinem vorhergehenden Beitrag habe ich \n (LF, 0x0A) mit \r (CR, 0x0D) verwechselt.
> Einziger Weg, den ich sehe und der auch funktioniert: Ich ersetze für diese Zuweisung die CRLF durch jeweils ein %0A.
Nein, Codiere deine Ausgabe so, dass tatsächlich die zwei Zeichen Backslash, 'n' gesendet werden. Ich spreche kein Perl, kann dir also im Detail nicht helfen.
So long,
Martin
--
Es sagte...
ein korpulenter Lehrer zu einem Schüler, der ihn ein Fass genannt hatte: "Nein. Ein Fass ist von Reifen umgeben, ich dagegen von Unreifen."
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
hi Martin,
Nein, Codiere deine Ausgabe so, dass tatsächlich die zwei Zeichen Backslash, 'n' gesendet werden.
Vielen Dank, das hatte ich gestern auch übersehen: Nämlich dass es ZWEI Zeichen sein müssen. Mein erster Test sieht gut aus, ich mache da mal weiter, das wird!!!
Ich spreche kein Perl, kann dir also im Detail nicht helfen.
Wir sprechen Egal. Und in harnäckigen Fällen: Scheisegal.
-Legehennenexperte