2012-07-17 67 views
27

說我有一個字符串變量(var str)按以下如何在使用javascript的字符串中將雙引號替換爲escape-char雙引號?

哥們,他完全說:「你搖滾!」

現在,如果我要使它看起來像如下 -

哥們,他完全說,\ 「你搖滾!\」

我如何使用JavaScript replace()函數完成此操作?

str.replace("\"","\\"");不能很好地工作。它給出unterminated string literal錯誤。

現在,如果上面這句話將被存儲在一個SQL數據庫,例如在MySQL作爲LONGTEXT(或任何其他VARCHAR -ish)數據類型,我需要什麼字符串優化執行?引號和逗號與查詢字符串不太友好。我希望在這個問題上也有一些建議。

回答

6

試試這個:

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

或者使用單引號引用您的搜索和替換字符串:

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

UPDATE:由於helmus指出,如果第一個參數傳遞給.replace()是一個字符串,它只會替換第一次出現。要更換你全球必須通過正則表達式與g(全局)標誌:

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

但你爲什麼連這樣做在JavaScript?這是確定的,如果你有一個字符串字面喜歡使用這些轉義字符:

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

但這是必要的在一個字符串。也就是說,如果您的JS變量設置爲用戶在表單字段中鍵入的值,則不需要此轉義。

關於將這樣的字符串存儲在SQL數據庫中的問題,如果要在SQL語句中嵌入字符串文字,只需要轉義字符 - 並記住SQL中應用的轉義字符不是' t(通常)與JS相同。你會做任何SQL相關的轉義服務器端。

+0

這將不會工作,因爲它只會取代第一個雙引號 – 2012-07-17 06:03:31

+0

好點@helmus - 我會更新我的答案。 – nnnnnn 2012-07-17 06:04:30

+0

@nnnnnn感謝有關SQL查詢轉義的其他信息。對於我正在開發的測試項目,我決定在將查詢字符串作爲查詢字符串發送到服務器之前,轉義任何必須轉義的字符。 – 2012-07-17 06:27:42

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