it-swarm.com.de

Einzelne Anführungszeichen in JavaScript-Zeichenfolge für die JavaScript-Bewertung mit Escapezeichen versehen

Ich habe ein Projekt, in dem einige JavaScript var ausgewertet werden. Da die Zeichenfolge mit Escapezeichen versehen werden muss (nur in Anführungszeichen), habe ich in eine Testfunktion genau denselben Code geschrieben. Ich habe den folgenden einfachen JavaScript-Code:

function testEscape() {
    var strResult = "";
    var strInputString = "fsdsd'4565sd";

    // Here, the string needs to be escaped for single quotes for the eval 
    // to work as is. The following does NOT work! Help!
    strInputString.replace(/'/g, "''");

    var strTest = "strResult = '" + strInputString + "';";
    eval(strTest);
    alert(strResult);
}

Und ich möchte es alarmieren und sagen: fsdsd'4565sd.

27
Florian Mertens

Die Sache ist, dass .replace() die Zeichenfolge selbst nicht ändert, also schreiben Sie etwas wie:

strInputString = strInputString.replace(...

Es scheint auch, als würden Sie die Flucht der Charaktere nicht korrekt durchführen. Folgendes hat für mich gearbeitet:

strInputString = strInputString.replace(/'/g, "\\'");
74

Ich stimme zu, dass diese var formattedString = string.replace(/'/g, "\\'"); sehr gut funktioniert, aber da ich diesen Teil des Codes in PHP mit dem Framework Prado (Sie können das Js-Skript in einer PHP -Klasse registrieren) verwenden, brauchte ich dieses Beispiel innerhalb von double Zitate. 

Die Lösung, die für mich funktioniert hat, ist, dass Sie drei \ setzen und die doppelten Anführungszeichen verwenden müssen ."var string = \"l'avancement\"; var formattedString = string.replace(/'/g, \"\\\'\");"

Ich beantworte diese Frage, da ich Schwierigkeiten hatte, herauszufinden, dass drei \ die Arbeit war.

2
YziGer

Nur das hat bei mir geklappt:

searchKeyword.replace("\'", "\\\'");//searchKeyword contains "d'av"

Die Ergebnisvariable enthält also "d\'av".

Ich weiß nicht, warum das mit RegEx nicht funktioniert hat, möglicherweise aufgrund des von mir verwendeten JS-Frameworks (Backbone.js).

0
João Ox Oc

Verwenden Sie JSON.stringify() am besten, um alle Ihre Basen wie Backslashes und andere Sonderzeichen abzudecken:

var strTest = "strResult = " + JSON.stringify(strInputString) + ";";
eval(strTest);
alert(strResult);

Beachten Sie, dass es eigene doppelte Anführungszeichen hinzufügt, sodass Sie keine einfachen Anführungszeichen mehr hinzufügen müssen.

0
Kev