如何使用javascript将字符串中的escape-char双引号替换为双引号?

时间:2012-07-17 05:58:38

标签: javascript string escaping

假设我有一个字符串变量(var str),如下所示 -

  

老兄,他完全说“你摇滚!”

现在如果我要使它看起来如下 -

  

老兄,他完全说“你摇滚!”

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

str.replace("\"","\\"");效果不佳。它会出现unterminated string literal错误。

现在,如果将上述句子存储在SQL数据库中,比如在MySQL中将其作为 LONGTEXT (或任何其他 VARCHAR -ish)数据类型,那还有什么我需要执行字符串优化?引号和逗号对查询字符串不是很友好。我也很欣赏这方面的一些建议。

4 个答案:

答案 0 :(得分:56)

你需要使用全局正则表达式,这样试试

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

在这里查看替换函数的正则表达式语法和选项:

http://www.regular-expressions.info/javascript.html

答案 1 :(得分:6)

试试这个:

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

或者,使用单引号引用搜索并替换字符串:

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

更新:正如helmus所指出的,如果传递给.replace()的第一个参数是一个字符串,它只会替换第一个匹配项。要全局替换,您必须使用g(全局)标志传递正则表达式:

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

但是你为什么要用JavaScript做这个呢?如果您有一个字符串文字,可以使用这些转义字符:

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

但这在字符串文字中只有 。也就是说,如果您的JS变量设置为用户在表单字段中键入的值,则不需要进行此转义。

关于将此类字符串存储在SQL数据库中的问题,如果要在SQL语句中嵌入字符串文字,则只需要转义字符 - 并记住在SQL中应用的转义字符不是(通常)与JS相同。你可以做任何与SQL相关的转义服务器端。

答案 2 :(得分:1)

其他答案适用于大多数字符串,但您最终可以解除已经转义的双引号,这可能不是您想要的。

要正常工作,您将需要转义所有反斜杠,然后转义所有双引号,如下所示:

var test_str = '"first \\" middle \\" last "';
var result = test_str.replace(/\\/g, '\\\\').replace(/\"/g, '\\"');

取决于你需要如何使用字符串,以及涉及的其他转义字符,这可能仍有一些问题,但我认为它可能在大多数情况下都有效。

答案 3 :(得分:0)

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