【问题标题】:Internet explorer 9 issue with escaping double quotes javascriptInternet Explorer 9 转义双引号 javascript 的问题
【发布时间】:2015-03-24 14:52:33
【问题描述】:

以下是我的情况: var sql = 'INSERT INTO \"template_items\" (\"item\") VALUES (\"0a\")';

alert(sql) 给出以下值:

插入“template_items”(“item”)值(“0a”)
这是正确的,并且显示了正确的双引号转义。

但是当在IE9调试器(F12)中查看变量sql时,下面是它的值

"插入到\"template_items\" (\"item\") VALUES (\"0a\")"

反斜杠仍然存在。

现在,当我在以下语句中使用变量 sql 时,这会产生问题:

connection.BeginTrans();

connection.Execute(sql);

connection.CommitTrans();

这个问题的解决方法是什么?

【问题讨论】:

  • 这根本不能回答你的问题,但是......为什么你的 JavaScript 中有 SQL? (除非您使用 Web SQL 客户端,这很好,但 doesn't work with IE anyway
  • 至于您的“问题”,您的调试器正在向您显示字符串的表示(包括初始和终止引号),以及转义反斜杠。但是,这只是表示;您的字符串实际上不包含它们(正如您使用 alert 显示值时所看到的那样)。
  • 当我使用 connection.Execute(sql);语句,它采用调试器值而不是警报值。现在,当我不转义双引号时,调试器会自动显示反斜杠。所以似乎没有办法在 IE9 调试器和执行(sql)语句中保留没有反斜杠的双引号

标签: javascript escaping double quotes


【解决方案1】:

首先;你应该永远不要在前端创建 SQL !!!这是一个巨大的安全漏洞!

第二:要解决控制台中的问题,您可以在文本周围使用单引号并在内部使用双引号:var text = 'some " quotes " in " text'(但是当后端收到您的字符串时,这应该不是问题)

【讨论】:

  • 虽然我完全同意你的第一段,但你的第二段是不恰当的(而且 OP 已经在这样做了)。
  • "插入到 \'template_items\' (\'item\') 值 (\'0a\')";如果你是这个意思,那么没有任何区别问题仍然存在。
  • 不,我的意思是:'INSERT INTO "template_items" ("item") VALUES ("0a")';
【解决方案2】:

如果其他人遇到同样的问题,

[accessdb.js][1] 效果很好。

我调试了一下,发现recordset.open漏掉了一些参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 2014-08-24
    • 2015-11-01
    • 2014-08-25
    相关资源
    最近更新 更多