javascript - 在 JavaScript 中转义要放置在生成的 JavaScript 源中的字符串

标签 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. 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/

相关文章:

javascript - 使用 javascript(jquery) 从外部 SVG 文件获取或设置 css 类值

mysql - 如何阻止 Rails 转义 SQL 中特定列的值?

javascript - 在 javascript 中准确地转义 HTML 实体

javascript - 单击屏幕上的任意位置即可隐藏通知栏,无需使用 Jquery

Javascript弹出窗口脚本

c# - 在 .NET 中创建 Uri 会自动对传递的字符串中的所有参数进行 urldecode

c++ - doxygen 生成供机器读取的文档

java - 内联领域特定语言以生成 Java 代码

swift - Apollo iOS 代码生成 : Nested use of a fragment in a mutation creates unexpected property types in Fragments struct

javascript - 在javascript中打印对象数组并在html标签中打印