提问人:MOHAMED SIKKANDAR AFZAL M 提问时间:8/1/2023 更新时间:9/18/2023 访问量:45
如何处理使用 JavaScript EVAL 的引号
how to handle quotes on using javascript eval
问:
var userString = `var a='sister\'s'`
eval(userString) //error
我将获取用户字符串并执行 eval,由于字符串已转义,因此会抛出解析错误。 如何正确评估它,我看到我们可以进行一些正则表达式处理并替换引号,但我不确定它是否会有效工作,因为用户的 javascript 内容可以是任何 javascript 内容。有没有通用的方法?
答:
-1赞
Barmar
8/1/2023
#1
要把字面上的反斜杠放进去,你必须把它加倍。userString
var userString = `var a='sister\\'s'; console.log(a);`
console.log(userString);
eval(userString) //error
评论
0赞
MOHAMED SIKKANDAR AFZAL M
8/1/2023
伙计,我知道我必须使用双斜杠。由于它的用户字符串,我需要正确地执行replace()。我问 tat 代码,比如 userString.replaceAll(“\\”,“\\\\”)
0赞
Barmar
8/1/2023
您无需对用户输入执行任何操作。只有字符串文字才需要这样做。
0赞
MOHAMED SIKKANDAR AFZAL M
8/1/2023
是的,伙计,用户会向我传递一个有效的字符串,他将其写入他的文件中,作为对用户的 Acoording,这是一个有效的字符串,当我尝试执行 eval 时,单斜杠被转义并抛出错误。我在问如何预防它。我无法将实际内容更改为您所说的内容,而是我能做的是获取字符串并执行,但这也会失败,因为在 replaceall 之前斜杠正在升级,有什么可以实现的吗?var a = 'sister\'s'; console.log(a);
var a='sister\\'s'; console.log(a);
string.replaceAll("\\","\\\\")
0赞
Barmar
8/1/2023
如果他们在文件中编写字符串文字,则必须转义反斜杠。这不能是可选的,因为这样你就永远不知道你收到的哪些反斜杠和引号需要转义。
0赞
MOHAMED SIKKANDAR AFZAL M
8/2/2023
根据用户的说法,在他的 some.js 文件中,我们会写 ''' var a = 'sister's';控制台.log(a) ;''' 根据用户的说法,这是正确有效的代码。我不能告诉他每一次斜线都反斜线。我是读取该文件并处理它的人。
1赞
MOHAMED SIKKANDAR AFZAL M
9/18/2023
#2
我们可以利用 String.raw API
var userString = String.raw`var a='sister\'s'`;
eval(userString) //no error and variable 'a' will have the expected value.
评论
console.log(userString)
userString