JavaScript-Backslash (\) in Variablen verursacht einen Fehler

Lesezeit: 7 Minuten

JavaScript Backslash in Variablen verursacht einen Fehler
Imrul

Wenn ich in Javascript einen Backslash in einige Variablen setze, wie:

var ttt = "aa ///\\\";
var ttt = "aa ///\"; 

Javascript zeigt einen Fehler.

Wenn ich versuche, den Benutzer bei der Eingabe dieses Zeichens einzuschränken, erhalte ich auch eine Fehlermeldung:

(("aaa ///\\\").indexOf('"') != -1)

Das Einschränken von Backslashes bei Benutzereingaben ist keine gute Strategie, da Sie dem Benutzer eine lästige Nachricht anzeigen müssen.

Warum erhalte ich eine Fehlermeldung mit Backslash?

  • scackoverflow entfernt meinen 1 Schrägstrich von überall, sogar in () gab es 1 Schrägstrich (\). Die eigentliche Schrägstrichfolge besteht aus 3 Schrägstrichen in einer Variablen

    – Imrul

    11. Oktober 2010 um 4:19 Uhr


  • Woher kommt der Eingabestring? Kommt es vom Browser selbst (vom Benutzer eingegeben) oder vom Backend (eingefügt von PHP/Perl/Ruby/etc..)? Ich frage, weil es so aussieht, als würden Sie versuchen, Javascript zu verwenden, um dies zu lösen, was absolut keinen Sinn ergibt. Alle Zeichenfolgen, die vom Benutzer direkt in den Browser eingegeben werden, sind bereits maskiert, sodass Sie keine Maskierung vornehmen müssen. Das einzige Problem wäre, was im Backend abgerufen wird.

    – Schlafmann

    11. Oktober 2010 um 4:41 Uhr

  • Ja, es handelt sich um Benutzereingaben aus HTML-Eingaben, die im Browser abgelegt wurden, und die Manipulation erfolgt nicht mit Javascript. Ich verwende ASP.NET (C#) im Backend. In ASP.NET gibt es keine „addslashes“-Funktion. Wenn dies serverseitig gelöst werden kann, ist es auch für mich in Ordnung.

    – Imrul

    11. Oktober 2010 um 4:46 Uhr


  • @Imrul, lange Rede kurzer Sinn, auf der Client-Seite wirst du es tun verfügen über Quellcode buchstäblich einzulesen var ttt = "aa ///\\\\\\";. Versuchen Sie, das zu erreichen. Wenn Sie C# verwenden, warum haben Sie uns Links zu PHP gegeben? Sie sollten Ihren C#-Code posten.

    – besser leben

    11. Oktober 2010 um 4:52 Uhr

  • Sie können dies nicht in Javascript lösen (da es sich dann bereits um einen Syntaxfehler handelt). Taggen Sie Ihre Frage erneut als ASP.NET und zeigen Sie uns, wie Sie die Zeichenfolge in ASP einfügen.

    – Schlafmann

    11. Oktober 2010 um 5:53 Uhr

JavaScript Backslash in Variablen verursacht einen Fehler
Daniel Vandersluis

Der Backslash (\) ist ein Escape-Zeichen in Javascript (zusammen mit vielen anderen C-ähnlichen Sprachen). Das bedeutet, dass Javascript, wenn es auf einen Backslash stößt, versucht, das folgende Zeichen zu maskieren. Zum Beispiel, \n ist ein Zeilenumbruchzeichen (anstelle eines umgekehrten Schrägstrichs gefolgt von dem Buchstaben n).

Um einen wörtlichen Backslash auszugeben, müssen Sie entkommen es. Das bedeutet \\ gibt einen einzelnen Backslash aus (and \\\\ gibt zwei aus usw.). Der Grund "aa ///\" funktioniert nicht, weil der Backslash dem entgeht " (was ein wörtliches Anführungszeichen ausgibt), und daher wird Ihre Zeichenfolge nicht ordnungsgemäß beendet. Ähnlich, "aa ///\\\" funktioniert nicht, weil der letzte Backslash wieder dem Anführungszeichen entgeht.

Denken Sie daran, dass Sie für jeden Backslash, den Sie ausgeben möchten, Javascript angeben müssen zwei.

  • Tolle Erklärung. Dafür gebe ich 1 Stimme ab. Aber ich habe das nicht akzeptiert, weil ich keine Antwort bekommen habe. Die Eingabe liegt in der Hand des Benutzers, und wenn der Benutzer versucht, diese Art von Sequenz einzugeben, ist es möglich, dies zu überwinden.

    – Imrul

    11. Oktober 2010 um 8:23 Uhr

1647258910 507 JavaScript Backslash in Variablen verursacht einen Fehler
Roy Scharon

Sie können Folgendes versuchen, was mehr oder weniger die Standardmethode ist, um Benutzereingaben zu umgehen:

function stringEscape(s) {
    return s ? s.replace(/\\/g,'\\\\').replace(/\n/g,'\\n').replace(/\t/g,'\\t').replace(/\v/g,'\\v').replace(/'/g,"\\'").replace(/"/g,'\\"').replace(/[\x00-\x1F\x80-\x9F]/g,hex) : s;
    function hex(c) { var v = '0'+c.charCodeAt(0).toString(16); return '\\x'+v.substr(v.length-2); }
}

Dies ersetzt alle Backslashes durch einen Backslash mit Escapezeichen und fährt dann damit fort, andere nicht druckbare Zeichen in ihre Escape-Form zu maskieren. Außerdem werden einfache und doppelte Anführungszeichen maskiert, sodass Sie die Ausgabe sogar in eval als String-Konstruktor verwenden können (was an sich schon eine schlechte Idee ist, wenn man bedenkt, dass Sie Benutzereingaben verwenden). Aber in jedem Fall sollte es die gewünschte Arbeit leisten.

  • Bitte führen Sie dies aus, nachdem Sie Ihre Funktion in HTML HEAD hinzugefügt haben. Sie werden den Unterschied sehen.

    – Imrul

    11. Oktober 2010 um 8:14 Uhr


  • @Imrul, ich bin mir nicht sicher, ob ich es verstehe. Schreiben ein Skript Die Verwendung von „aa ///\\\“ ist nicht dasselbe wie das Abrufen von „aa ///\\\“ als Eingabe vom Benutzer. Im ersten Fall werden der dreifache Backslash und die darauf folgenden doppelten Anführungszeichen als einfacher Backslash gefolgt von einem doppelten Anführungszeichen interpretiert. Im letzteren Fall wird die Eingabe wörtlich interpretiert und enthält die drei Backslashes. Die Funktion stringEscape() wandelt eine Benutzereingabe in ein String-Literal in Skriptform um. Ich dachte, das ist es, was du erreichen wolltest, oder?

    – Roy Scharon

    11. Oktober 2010 um 8:59 Uhr


1647258911 811 JavaScript Backslash in Variablen verursacht einen Fehler
besser leben

Sie müssen jedem entkommen \ zu sein \\:

var ttt = "aa ///\\\\\\";

Aktualisiert: Ich denke, diese Frage bezieht sich überhaupt nicht auf das Escape-Zeichen in der Zeichenfolge. Der Fragesteller scheint das Problem nicht richtig zu erklären.

weil Sie dem Benutzer eine Nachricht anzeigen mussten, dass der Benutzer keinen Namen mit (\) Zeichen angeben kann.

Ich denke, das Szenario ist wie folgt:

var user_input_name = document.getElementById('the_name').value;

Dann will der Fragesteller prüfen, ob user_input_name enthält irgendwelche [\]. Wenn dies der Fall ist, warnen Sie den Benutzer.

Wenn der Benutzer eintritt [aa ///\] im HTML-Eingabefeld, dann wenn Sie alert(user_input_name)du wirst sehen [aaa ///\]. Sie brauchen nicht zu entkommen, dh zu ersetzen [\] zu sein [\\] im JavaScript-Code. Wenn Sie maskieren, liegt das daran, dass Sie versuchen, eine Zeichenfolge zu erstellen, die Sonderzeichen enthält in JavaScript-Quellcode. Wenn Sie es nicht tun, wird es nicht korrekt geparst. Da Sie bereits einen String erhalten, müssen Sie ihn nicht an eine Escape-Funktion übergeben. Wenn Sie dies tun, generieren Sie vermutlich einen weiteren JavaScript-Code aus einem JavaScript-Code, aber das ist hier nicht der Fall.

Ich vermute, Asker möchte die Eingabe simulieren, damit wir das Problem verstehen können. Leider versteht Asker JavaScript nicht gut. Daher wird uns ein Syntaxfehlercode geliefert:

var ttt = "aa ///\";

Daher nehmen wir an, dass der Fragesteller Probleme mit dem Entkommen hat.

Wenn Sie simulieren möchten, muss Ihr Code an erster Stelle gültig sein.

var ttt = "aa ///\\"; // <- This is correct
// var ttt = "aa ///\"; // <- This is not.

alert(ttt); // You will see [aa ///\] in dialog, which is what you expect, right?

Jetzt müssen Sie nur noch tun

var user_input_name = document.getElementById('the_name').value;
if (user_input_name.indexOf("\\") >= 0) { // There is a [\] in the string
  alert("\\ is not allowed to be used!"); // User reads [\ is not allowed to be used]
  do_something_else();
  }

Bearbeiten: Ich benutzte [] um Text zu zitieren, der angezeigt werden soll, so wäre es weniger verwirrend als mit "".

  • Bitte sehen Sie sich diese Links an javascript.about.com/library/bladdslash.htm & navioo.com/javascript/tutorials/Javascript_addslashes_1558.html Sie haben dasselbe getan, aber wenn ich var t =addslashes(“aa ///\\\”) verwende, dann habe ich einen Fehler bekommen!!

    – Imrul

    11. Oktober 2010 um 4:40 Uhr


  • Kodierst du serverseitig in PHP? Weil var t scheint nicht wie eine PHP-Variablendeklaration zu sein.

    – besser leben

    11. Oktober 2010 um 4:47 Uhr

  • Ich verwende Javascript, um dies zu lösen. Ich habe versucht, Escape (String) und Unescape (String) zu verwenden. Aber auch diese haben nicht funktioniert

    – Imrul

    11. Oktober 2010 um 4:59 Uhr

  • Dann hat Ihnen meine Antwort bereits gesagt, wie Sie \ entkommen können, wenn Sie eine Zeichenfolge in JS-Code eingeben. Die escape() ist nicht dafür da.

    – besser leben

    11. Oktober 2010 um 5:07 Uhr


  • Ich habe deine Antwort. Aber das ist nicht, was ich will. Wenn Ihre Eingabe dynamisch ist, wie können Sie dann einen zusätzlichen Schrägstrich in Ihre Zeichenfolge einfügen? Dazu braucht man eine Funktion. Ich habe eine Funktion verwendet, wie ich bereits erwähnt habe, aber ich habe nicht das bekommen, was ich will.

    – Imrul

    11. Oktober 2010 um 8:18 Uhr

Der Backslash \ ist für die Verwendung als Escape-Zeichen in Javascript reserviert.

Um einen umgekehrten Schrägstrich wörtlich zu verwenden, müssen Sie zwei umgekehrte Schrägstriche verwenden

\\

Wenn Sie Sonderzeichen im Javascript-Variablenwert verwenden möchten, Escape-Zeichen (\) ist nötig.

Backslash in Ihrem Beispiel ist auch ein Sonderzeichen.

Sie sollten also so etwas tun,

var ttt = "aa ///\\\\\\"; // --> ///\\\

oder

var ttt = "aa ///\\"; // --> ///\

Aber Escape-Zeichen nicht für Benutzereingaben erforderlich.

Wenn Sie drücken / in Promptbox oder Eingabefeld dann absenden, das heißt Single /.

1001420cookie-checkJavaScript-Backslash (\) in Variablen verursacht einen Fehler

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy