我正在编写将生成一些 JavaScript 的代码。 JavaScript 将涉及将生成代码中的变量分配给传递到生成器中的字符串。生成器也是用 JavaScript 编写的。
基本上我想这样做:
function generate_code(text) {
return "var a = " + jsEscapeString(text) + "; alert(a);";
}
function jsEscapeString(text) {
// WHAT GOES HERE?
// e.g. it needs to:
// - surround with quotes
// - escape quotes inside the text
// - escape backslashes and newlines and other fun characters
// - defend against other horrible things I probably don't know about
}
我不想要一些只在快乐的情况下有效的东西。我想要一些正确的东西。在恶意对手试图对生成的代码进行沙箱转义时,可以幸存下来的东西(例如,就像您在 the game 'Untrusted' 中所做的那样)。
最佳答案
super 简单。
function jsEscapeString(text) {
return JSON.stringify(text);
}
无论你输入什么,你总是会得到它的有效表示,可以转储到 JS 源中。执行时的结果将始终与您输入的内容完全相同。
这甚至适用于字符串、 bool 值、数字、数组、对象......基本上是您需要的所有内容。
虽然我很好奇你为什么要这样做...这有点eval
鱼腥味...
关于javascript - 在 JavaScript 中转义要放置在生成的 JavaScript 源中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32685408/