假设我有一个字符串变量(
var str
)如下-
老兄,他完全说“你摇滚!”
现在如果我要让它看起来像下面这样-
老兄,他完全说“你摇滚!”
如何使用 JavaScript
replace()
函数完成此操作?
str.replace("\"","\\"");
效果不太好。它给出了 unterminated string literal
错误。
现在,如果上面的句子要存储在 SQL 数据库中,例如在 MySQL 中作为 LONGTEXT(或任何其他 VARCHAR)数据类型,我还需要执行哪些字符串优化?
引号和逗号对查询字符串不太友好。我也希望就此事提出一些建议。
试试这个:
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!\"";
但是这仅在字符串文字中是必要的。也就是说,如果您的 JavaScript 变量设置为用户在表单字段中键入的值,则不需要进行此转义。
关于在 SQL 数据库中存储此类字符串的问题,同样,如果您在 SQL 语句中嵌入字符串文字,则只需转义字符 - 请记住,在 SQL 中应用的转义字符不是(通常) ) 与 JavaScript 相同。您可以在服务器端执行任何与 SQL 相关的转义操作。
其他答案适用于大多数字符串,但您最终可能会取消转义已经转义的双引号,这可能不是您想要的。
为了正确工作,您需要转义所有反斜杠,然后转义所有双引号,如下所示:
var test_str = '"first \\" middle \\" last "';
var result = test_str.replace(/\\/g, '\\\\').replace(/\"/g, '\\"');
根据您需要如何使用字符串以及涉及的其他转义字符,这可能仍然存在一些问题,但我认为它在大多数情况下可能会起作用。
var str = 'Dude, he totally said that "You Rock!"';
var var1 = str.replace(/\"/g,"\\\"");
alert(var1);