如何使用JavaScript将字符串中的双引号替换为转义字符双引号?
假设我有一个字符串变量(如何使用JavaScript将字符串中的双引号替换为转义字符双引号?,javascript,string,escaping,Javascript,String,Escaping,假设我有一个字符串变量(var str),如下所示- 老兄,他完全说了“你太棒了!” 现在如果我要让它看起来像下面这样- 老兄,他完全说了“你太棒了!” 如何使用JavaScriptreplace()函数实现这一点 str.replace(“\”,“\”)工作得不太好。它给出了未终止的字符串文本错误 现在,如果上面的句子要存储在SQL数据库中,比如说在MySQL中作为一个LONGTEXT(或任何其他VARCHAR-ish)数据类型,那么我还需要执行哪些字符串优化 引号和逗号对查询字符串不是很友好
var str
),如下所示-
老兄,他完全说了“你太棒了!”
现在如果我要让它看起来像下面这样-
老兄,他完全说了“你太棒了!”
如何使用JavaScriptreplace()
函数实现这一点
str.replace(“\”,“\”)代码>工作得不太好。它给出了未终止的字符串文本
错误
现在,如果上面的句子要存储在SQL数据库中,比如说在MySQL中作为一个LONGTEXT(或任何其他VARCHAR-ish)数据类型,那么我还需要执行哪些字符串优化
引号和逗号对查询字符串不是很友好。我也希望能就此事提出一些建议。试试这个:
str.replace("\"", "\\\""); // (Escape backslashes and embedded double-quotes)
或者,使用单引号引用搜索和替换字符串:
str.replace('"', '\\"'); // (Still need to escape the backslash)
正如helmus所指出的,如果传递给.replace()
的第一个参数是字符串,它将只替换第一个出现的参数。要全局替换,必须传递带有g
(全局)标志的正则表达式:
但你为什么要用JavaScript来做这件事呢?如果您有如下字符串文字,则可以使用这些转义字符:
var str = "Dude, he totally said that \"You Rock!\"";
但这仅在字符串文本中是必需的。也就是说,如果您的JavaScript变量设置为用户在表单字段中键入的值,则不需要执行此转义
关于在SQL数据库中存储这样一个字符串的问题,同样,如果要在SQL语句中嵌入字符串文字,则只需转义字符——请记住,SQL中应用的转义字符(通常)与JavaScript中的转义字符不同。您可以在服务器端执行任何与SQL相关的转义操作。您需要为此使用全局正则表达式。试着这样做:
str.replace(/"/g, '\\"');
请查看中replace函数的regex语法和选项。其他答案适用于大多数字符串,但您可能会忽略已转义的双引号,这可能不是您想要的
要正确工作,您需要转义所有反斜杠,然后转义所有双引号,如下所示:
var test_str = '"first \\" middle \\" last "';
var result = test_str.replace(/\\/g, '\\\\').replace(/\"/g, '\\"');
根据您需要如何使用字符串以及涉及的其他转义字符,这可能仍然存在一些问题,但我认为它在大多数情况下可能会起作用。这将不起作用,因为它只会重新发送第一个双精度字符quote@nnnnnn感谢您提供有关SQL查询转义的更多信息。对于我正在进行的测试项目,我决定先转义所有必须转义的字符,然后再将它们作为查询中的字符串发送到服务器。您没有将SQL查询从JS发送到服务器,是吗?这将是一个重大的安全问题。(另外,我从未使用过MySQL,但我使用的数据库(如SQLServer、DB2和Oracle)不需要转义双引号,也不需要用反斜杠转义单引号…)为什么需要正则表达式来替换文字字符串?@PeterMortensen例如,在使用GraphQL时可能需要正则表达式,因为GraphQL的标量通常只包含ID,字符串、Int、Float、Boolean,因此没有映射等。使用此方法可以很容易地将对象保存为字符串,这在某些情况下非常有用。如果没有正则表达式,JSON将被转义,查询将失败。
var str = 'Dude, he totally said that "You Rock!"';
var var1 = str.replace(/\"/g,"\\\"");
alert(var1);
var test_str = '"first \\" middle \\" last "';
var result = test_str.replace(/\\/g, '\\\\').replace(/\"/g, '\\"');