2012-07-17 11 views
27

Dire che ho una variabile stringa (var str) i seguenti-Come sostituire una virgoletta con una virgoletta escape-char in una stringa usando javascript?

Amico, ha totalmente detto che "You Rock!"

Ora Se devo far sembrare i seguenti-

Amico, ha totalmente detto che \ "you rock! \"

Come faccio realizzare questo utilizzando la funzione JavaScript replace()?

str.replace("\"","\\""); non funziona così bene. Si dà l'errore unterminated string literal.

Ora, se la frase di cui sopra dovesse essere memorizzati in un database SQL, dicono in MySQL come LONGTEXT (o qualsiasi altro VARCHAR -ish) tipo di dati, cosa stringa cosa ottimizzazioni ho bisogno di eseguire? Quotes e virgole non sono molto amichevoli con le stringhe di query. Apprezzerei anche alcuni suggerimenti su questo argomento.

risposta

6

Prova questo:

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

In alternativa, utilizzare le virgolette singole per citare la ricerca e sostituzione di stringhe:

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

UPDATE: Come sottolineato da Helmus, se il primo parametro passato a .replace() è una stringa che sostituirà solo la prima occorrenza. Per sostituire globalmente devi passare una regex con la bandiera g (globale):

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

Ma perché stai anche facendo questo in JavaScript? E 'OK per utilizzare questi caratteri di escape se si dispone di una stringa letterale come:

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

Ma questo è necessaria solo in una stringa letterale. Cioè, se la tua variabile JS è impostata su un valore che un utente ha digitato in un campo modulo non è necessario eseguire questa operazione di escape.

Per quanto riguarda la tua domanda sull'archiviazione di tale stringa in un database SQL, di nuovo devi solo sfuggire i caratteri se inserisci una stringa letterale nell'istruzione SQL e ricorda che i caratteri di escape che si applicano in SQL non sono " t (di solito) lo stesso di JS. Dovresti eseguire qualsiasi operazione di escape sul lato server sul lato SQL.

+0

questo non funzionerà in quanto rilascerà solo la prima virgoletta doppia –

+0

Good point @helmus - aggiornerò la mia risposta. – nnnnnn

+0

@nnnnnn Grazie per le informazioni aggiuntive sull'escapazione della query SQL. Per il progetto di prova su cui stavo lavorando, ho deciso di sfuggire a tutti i caratteri must-escape prima di inviarli come stringa in una query al server. –

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