Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用JavaScript将字符串中的双引号替换为转义字符双引号?_Javascript_String_Escaping - Fatal编程技术网

如何使用JavaScript将字符串中的双引号替换为转义字符双引号?

如何使用JavaScript将字符串中的双引号替换为转义字符双引号?,javascript,string,escaping,Javascript,String,Escaping,假设我有一个字符串变量(var str),如下所示- 老兄,他完全说了“你太棒了!” 现在如果我要让它看起来像下面这样- 老兄,他完全说了“你太棒了!” 如何使用JavaScriptreplace()函数实现这一点 str.replace(“\”,“\”)工作得不太好。它给出了未终止的字符串文本错误 现在,如果上面的句子要存储在SQL数据库中,比如说在MySQL中作为一个LONGTEXT(或任何其他VARCHAR-ish)数据类型,那么我还需要执行哪些字符串优化 引号和逗号对查询字符串不是很友好

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

老兄,他完全说了“你太棒了!”

现在如果我要让它看起来像下面这样-

老兄,他完全说了“你太棒了!”

如何使用JavaScript
replace()
函数实现这一点

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, '\\"');