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

Flo*_*ens 31 javascript string eval escaping

我有一个项目,其中评估了一些JavaScript var.因为字符串需要转义(仅限单引号),所以我在测试函数中编写了完全相同的代码.我有以下一些非常简单的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);
}
Run Code Online (Sandbox Code Playgroud)

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

Nik*_*nko 77

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

strInputString = strInputString.replace(...
Run Code Online (Sandbox Code Playgroud)

看起来你似乎没有正确地逃避角色.以下对我有用:

strInputString = strInputString.replace(/'/g, "\\'");
Run Code Online (Sandbox Code Playgroud)


Kev*_*Kev 12

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

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

    var strTest = "strResult = " + JSON.stringify(strInputString) + ";";
    eval(strTest);
    alert(strResult);
}
Run Code Online (Sandbox Code Playgroud)

(这样你strInputString可能会像这样\\\'\"'"''\\abc'\,它仍然可以正常工作。)

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

  • @RobertMoskal 好的,完成。谢谢!(请注意,虽然 eval 是 OP 的一部分,但不是我的想法。我在这里复制了 OP 的函数,剪了一行,并为了清楚起见更改了 var strTest 行。) (2认同)