如何允许用户在Javascript中输入转义的字符

时间:2016-05-31 13:43:28

标签: javascript string escaping

这里很简单。

我有一个HTML <textarea>,我希望允许用户输入转义序列。即:

Hello\nworld\x21

我希望我的脚本能够“解释”\n\x21来获取:

Hello
world!

由于

编辑: 这样做的目的是允许用户在html页面中输入热敏打印机的代码。打印机需要特殊的字符。我想取这个字符串,“解释”特殊代码并将其发送到打印机。目前,打印机按原样打印字符串。

1 个答案:

答案 0 :(得分:0)

我能想到的唯一不使用 long 替换行的方法是使用eval()函数。例如,您可以使用以下内容:

function useEscapes(s) {
    return eval('("' + s.replace(/([^\\]|^)(?=(\\\\)*["\n])/g, '$1\\').replace(/\n/g, 'n') + '")');
}

replace是为了确保传递到eval()函数是安全的。

编辑9/28/2016:

有一种更好的方法,不是安全风险。因为字符串文字是有效的JSON,所以可以将其包装在引号中并使用JSON.parse。您还可以在其中转义引号,以便用户不会出现无法解释的语法错误。如果攻击者试图将代码放在字符串之外,则只会引发语法错误。

function useEscapes(s) {
    return JSON.parse('"' + s
        .replace(/((^|[^\\])(\\\\)*)"/g, '$1\\\\"') // optional - prevents syntax errors
        + '"');
}