2012-07-17 10 views
27

sagen, dass ich eine String-Variable haben (var str) als folgt-Wie ersetze ich ein Double-Quote mit einem Escape-Zeichen Doppelzitat in einer Zeichenfolge mit Javascript?

Geck, sagte er völlig, dass "Rock You!"

Jetzt Wenn ich es wie als folgt-

Geck aussehen, sagte er völlig, dass \ "You Rock! \"

Wie kann ich erreichen Sie dies mit der JavaScript replace() Funktion?

str.replace("\"","\\""); funktioniert nicht so gut. Es gibt unterminated string literal Fehler.

Wenn nun der oben Satz in einer SQL-Datenbank gespeichert werden sollte, sagen sie in MySQL als LONG (oder einem anderen VARCHAR -ish) Datentyp, was sonst String Optimierungen ich durchführen müssen? Zitate und Kommas sind nicht sehr freundlich mit Abfragezeichenfolgen. Ich würde auch ein paar Vorschläge in dieser Angelegenheit schätzen.

Antwort

6

Try this:

str.replace("\"","\\\""); // (escape backslashes and embedded double-quotes) 

Oder verwenden Sie einfache Anführungszeichen um die Suche zu zitieren und Ersetzen von Strings:

str.replace('"','\\"'); // (still need to escape the backslash) 

UPDATE: Wie Helmus wies darauf hin, wenn der erste Parameter zu .replace() geben ist eine Zeichenfolge, die nur das erste Vorkommen ersetzt. So ersetzen Sie global Sie einen regulären Ausdruck mit dem g -Flag (global) passieren müssen:

str.replace(/"/g,"\\\""); 
// or 
str.replace(/"/g,'\\"'); 

Aber warum sind Sie selbst tun dies in JavaScript? Es ist OK, diese Escape-Zeichen zu verwenden, wenn Sie einen Stringliteral wie haben:

var str = "Dude, he totally said that \"You Rock!\""; 

Dies ist aber notwendig nur in einem String-Literal. Das heißt, wenn Ihre JS-Variable auf einen Wert festgelegt ist, den ein Benutzer in ein Formularfeld eingegeben hat, müssen Sie dieses nicht umgehen.

In Bezug auf Ihre Frage über das Speichern einer solchen Zeichenfolge in einer SQL-Datenbank müssen Sie die Zeichen nur noch entschlüsseln, wenn Sie ein Zeichenfolgenliteral in Ihre SQL-Anweisung einbetten - und beachten Sie, dass die Escapezeichen in SQL gelten t (normalerweise) das gleiche wie für JS. Sie würden jede SQL-bezogene Escape-Server-Seite ausführen.

+0

dieses wird nicht funktionieren, da es nur das erste doppelte Zitat relate –

+0

Guter Punkt @helus - Ich werde meine Antwort aktualisieren. – nnnnnn

+0

@nnnnnn Danke für die zusätzlichen Informationen zum SQL-Abfrage-Escaping. Für das Testprojekt, an dem ich gerade arbeitete, entschloss ich mich, alle Must-Escape-Zeichen zu entfernen, bevor ich sie als String in einer Abfrage an den Server schickte. –

0
var str = 'Dude, he totally said that "You Rock!"'; 
var var1 = str.replace(/\"/g,"\\\""); 
alert(var1); 
Verwandte Themen