Javascript 使用字符串和模板文本的concatentation的转义字符串
我需要将untrusted*数据连接到javascript字符串中,但我需要它适用于所有类型的字符串(单引号、双引号或反勾引号) 理想情况下,我需要它同时处理多个字符串类型 我可以用字符串替换,但这通常是个坏主意 我使用的是JSON.stringify,但它只转义双引号,而不是单引号或反引号 我发现的其他答案涉及一次仅转义一种类型的引用(并且从不回溯) 我需要的一个例子:Javascript 使用字符串和模板文本的concatentation的转义字符串,javascript,Javascript,我需要将untrusted*数据连接到javascript字符串中,但我需要它适用于所有类型的字符串(单引号、双引号或反勾引号) 理想情况下,我需要它同时处理多个字符串类型 我可以用字符串替换,但这通常是个坏主意 我使用的是JSON.stringify,但它只转义双引号,而不是单引号或反引号 我发现的其他答案涉及一次仅转义一种类型的引用(并且从不回溯) 我需要的一个例子: untrustedData = 'a String with \'single quotes\', \"doubl
untrustedData = 'a String with \'single quotes\', \"double quotes\" and \`backticks\` in it';
const someJS = `console.log(\`the thing is "${escapingFunctionHere(untrustedString)}"\`)`
someJS
将被传递给new函数
*注意:在我的上下文中,这里的“不可信”并不意味着潜在的恶意,但它确实需要处理引用、逃逸等问题
我正在动态构建javascript代码,构建的代码将不会以任何方式面向web。事实上,我可能是唯一一个直接或间接使用此工具的人
我很乐意接受最小的相关风险
其他人注意:在做这类事情之前,确保你了解风险
对于那些感兴趣的人,我正在编写一个解析器创建者。给定一个输入ebnf语法文件,它将输出一个JS类,该类可用于解析内容。
我真的需要在这里输出代码。如果您只需要转义单引号
”
、双引号“
和反斜杠`
,那么使用来预加反斜杠\
就足够了:
untrustedData.replace(/['“`]/g,\\\$&'))
const untrustedData='I'am\'是一个'string';
console.log(不可信数据);
const escapedData=untrustedData.replace(/['“`]/g,\\\$&');
console.log(escapedData);
我会显示预期的输出,但我可能会以某种方式出错……”“someJS将被传递给新函数”,这似乎是要尝试和更改的,而不是“如何从随机输入动态生成有效的JS代码?”“@VLAZ我愿意接受这方面的建议。我确实需要输出将要执行的JS。最终,无论您是使用新函数
,评估
,还是将输出写入一个文件,然后要求
它,转义要求都将是相同的…您能否详细说明更大的图景,以及为什么这一切都是从…开始的“必要”?您的答案不处理输入字符串中的“\”。它还不能处理什么?这就是为什么我不想用字符串替换答案的原因您希望输出中的'\'
变成什么?这个问题似乎是相关的: