转义 JavaScript 字符串中的单引号以进行 JavaScript 评估

Posted

技术标签:

【中文标题】转义 JavaScript 字符串中的单引号以进行 JavaScript 评估【英文标题】:Escaping single quotes in JavaScript string for JavaScript evaluation 【发布时间】:2013-02-11 19:24:03 【问题描述】:

我有一个项目,其中评估了一些 javascript 变量。因为字符串需要转义(仅单引号),所以我在测试函数中编写了完全相同的代码。我有以下一些非常简单的 JavaScript 代码:

function testEscape() 
    var strResult = "";
    var strInputString = "fsdsd'4565sd";

    // Here, the string needs to be escaped for single quotes for the eval 
    // to work as is. The following does NOT work! Help!
    strInputString.replace(/'/g, "''");

    var strTest = "strResult = '" + strInputString + "';";
    eval(strTest);
    alert(strResult);

我想提醒它,说:fsdsd'4565sd

【问题讨论】:

一个相对安全的方法可能是var strResult=eval("("+strInputString+")");。此外,STRING 是不可变的,因此string.replace() 返回替换结果,而不是修改字符串。 这是你所期待的jsfiddle.net/ebTtp 【参考方案1】:

问题是.replace() 不会修改字符串本身,所以你应该写如下:

strInputString = strInputString.replace(...

您似乎也没有正确地进行字符转义。以下对我有用:

strInputString = strInputString.replace(/'/g, "\\'");

【讨论】:

对于剩下的 ActionScript mohicans 来说,这是可行的: var greet:String = "l'advancement"; greet = greet.split("'").join("\\'"); ExternalInterface.call("function()console.log('" + greet + "')"); 注意,如果原文中有反斜杠,这可能不起作用。 如前所述,这并不适用于所有场景。看看下面kev的答案,它每次都会起作用。【参考方案2】:

最好使用JSON.stringify() 来覆盖您的所有基础,例如反斜杠和其他特殊字符。这是您的原始功能,而不是修改strInputString

function testEscape() 
    var strResult = "";
    var strInputString = "fsdsd'4565sd";

    var strTest = "strResult = " + JSON.stringify(strInputString) + ";";
    eval(strTest);
    alert(strResult);

(这样您的strInputString 可能类似于\\\'\"'"''\\abc'\,它仍然可以正常工作。)

请注意,它会添加自己的双引号,因此您不再需要包含单引号。

【讨论】:

@RobertMoskal Care 要提供详细信息吗? (我假设您在运行上述 sn-p 之前在某处定义了 strInputString,根据 OP 的上下文...) 我错过了评估。这看起来确实很极端! @RobertMoskal 够公平的......如果你是反对我的人,你介意撤消它吗? :) 除非你编辑它,否则我不能。您可能会指出您的答案需要评估。 @RobertMoskal 好的,完成。谢谢! (请注意,虽然 eval 是/是 OP 的一部分,但不是我的想法。我在这里复制了 OP 的功能,剪下一行,并更改了 var strTest 行以清楚起见。)【参考方案3】:

我同意var formattedString = string.replace(/'/g, "\\'"); 工作得很好,但是由于我在 php 中使用了 Prado 框架中的这部分代码(您可以在 PHP 类中注册 js 脚本),所以我需要在双引号中使用这个示例。

对我有用的解决方案是您需要输入三个 \ 并转义双引号。 "var string = \"l'avancement\"; var formattedString = string.replace(/'/g, \"\\\'\");"

我回答这个问题是因为我很难找到三个\ 是解决办法。

【讨论】:

【参考方案4】:

只有这对我有用:

searchKeyword.replace(/'/g, "\\\'");//searchKeyword contains "d'av"

因此,结果变量将包含“d\'av”。

我不知道为什么 RegEx 不起作用,可能是因为我正在使用的 JS 框架 (Backbone.js)

【讨论】:

【参考方案5】:

在 JavaScript 中有两种转义单引号的方法。

1- 使用双引号或反引号将字符串括起来。

示例:“fsdsd'4565sd”或“fsdsd'4565sd”。

2- 在任何特殊字符前使用反斜杠,在我们的例子中是单引号

例子:strInputString = strInputString.replace(/ ' /g, " \\' ");

注意:使用双反斜杠。

这两种方法都适合我。

【讨论】:

欢迎来到 SO!请不要对之前已经回答过多次的问题提供迟到的答案,除非您有新的东西要添加,否则其他答案会失败。还将code boxes 添加到您的代码中^^【参考方案6】:

var str="fsdsd'4565sd"; str.replace(/'/g,"'")

这对我有用。请试试这个

【讨论】:

【参考方案7】:

这对我有用。

string address=senderAddress.Replace("'", "\\'");

【讨论】:

【参考方案8】:
strInputString = strInputString.replace(/'/g, "''");

【讨论】:

以上是关于转义 JavaScript 字符串中的单引号以进行 JavaScript 评估的主要内容,如果未能解决你的问题,请参考以下文章

Oracle中的单引号怎么转义

JavaScript字符串的单引号和双引号问题

Java Regex:查找带转义的单引号文本

如何转义json字符串中的单引号? JSON::ParserError Ruby

jshtml中的单引号双引号及其转义使用

SQL中的单引号转义符