【问题标题】:How do I replace a double-quote with an escape-char double-quote in a string using JavaScript?如何使用 JavaScript 在字符串中用转义字符双引号替换双引号?
【发布时间】:2012-07-17 05:58:38
【问题描述】:

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

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

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

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

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

str.replace("\"","\\""); 运行得不太好。它给出了unterminated string literal 错误。

现在,如果将上述语句存储在 SQL 数据库中,例如在 MySQL 中作为 LONGTEXT(或任何其他 VARCHAR-ish)数据类型,还有什么我需要执行的字符串优化?

引号和逗号对查询字符串不是很友好。我也希望能就此问题提出一些建议。

【问题讨论】:

    标签: javascript string escaping


    【解决方案1】:

    您需要为此使用全局正则表达式。试试这个方法:

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

    查看 Using Regular Expressions with JavaScript 中替换功能的正则表达式语法和选项。

    【讨论】:

    • 为什么需要正则表达式来替换文字字符串?
    • @PeterMortensen 例如,当使用 GraphQL 时,其标量通常只包括 ID、String、Int、Float、Boolean,因此没有 Maps 等,这可能是必要的。使用这种方法很容易将对象保存为字符串这在某些情况下可能很有用。没有正则表达式,JSON 将被转义,查询将失败。
    • 这解决了这个问题。谢谢
    【解决方案2】:

    试试这个:

    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!\"";
    

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

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

    【讨论】:

    • 这不起作用,因为它只会替换第一个双引号
    • @nnnnnn 感谢您提供有关 SQL 查询转义的附加信息。对于我正在处理的测试项目,我决定先转义任何必须转义的字符,然后再将它们作为查询中的字符串发送到服务器。
    • 您不是从 JS 向服务器发送 SQL 查询吗?那将是一个重大的安全问题。 (另外,我从未使用过 MySQL,但我使用的数据库,如 SQLServer、DB2 和 Oracle 不需要转义双引号,也不需要用反斜杠转义单引号......)
    【解决方案3】:

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

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

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

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

    【讨论】:

    • 是的,这是更强大的解决方案。
    【解决方案4】:
    var str = 'Dude, he totally said that "You Rock!"';
    var var1 = str.replace(/\"/g,"\\\"");
    alert(var1);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 2011-02-08
      • 1970-01-01
      • 2011-12-07
      • 1970-01-01
      • 2015-10-27
      • 2012-09-10
      相关资源
      最近更新 更多