转义 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 评估的主要内容,如果未能解决你的问题,请参考以下文章