在JavaScript中转义要放置在生成的JavaScript源中的字符串
我正在编写生成一些javascript的代码。javascript将涉及将生成代码中的变量分配给传递给生成器的字符串。生成器也是用javascript编写的 基本上我想这样做:在JavaScript中转义要放置在生成的JavaScript源中的字符串,javascript,escaping,code-generation,Javascript,Escaping,Code Generation,我正在编写生成一些javascript的代码。javascript将涉及将生成代码中的变量分配给传递给生成器的字符串。生成器也是用javascript编写的 基本上我想这样做: function generate_code(text) { return "var a = " + jsEscapeString(text) + "; alert(a);"; } function jsEscapeString(text) { // WHAT GOES HERE? // e.g.
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
}
我不想要只在快乐的情况下有效的东西。我想要一些正确的东西。恶意对手试图在生成的代码上执行沙盒转义时,能够生存下来的东西(例如,像您在中所做的一样)。超级简单
function jsEscapeString(text) {
return JSON.stringify(text);
}
无论您输入了什么,您都会得到它的有效表示形式,可以将其转储到JS源代码中。执行时,结果总是与您输入的内容完全一致
这甚至适用于字符串、布尔、数字、数组、对象。。。基本上你需要的一切
虽然我很好奇你为什么这么做。。。这闻起来像是鱼腥味……您需要转义反斜杠、字符串分隔符和控制字符:
function jsEscapeString(text) {
return '"' +
text
.replace(/\\/g, '\\\\')
.replace(/"/g, '\\"')
.replace(/\r/g, '\\r')
.replace(/\n/g, '\\n')
.replace(/\t/g, '\\t')
.replace(/\b/g, '\\b')
.replace(/\v/g, '\\v')
.replace(/\f/g, '\\f')
+ '"';
}
(这个问题可能是重复的,但我的google fu让我失望了。)没有可以打断字符串的unicode字符,例如用于开始新行的替代字符?@Strilan:没有,其他新行字符没有任何用途,其他字符也没有特殊意义。例如,Unicode有可选的引号,但JavaScript不允许这些引号作为字符串分隔符。啊,当然。(这是一个小部件,用户可以在其中输入javascript作为解决难题的一部分。这不是安全敏感或影响数据的问题,我只是不想以一种一旦包含报价就会中断的方式编写它。)