Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何允许用户在Javascript中输入转义字符_Javascript_String_Escaping - Fatal编程技术网

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

如何允许用户在Javascript中输入转义字符,javascript,string,escaping,Javascript,String,Escaping,这里有一个简单的 我有一个HTML,我想允许用户输入转义序列。即: Hello\nworld\x21 我想让我的脚本“解释”\n和\x21以获得: 你好 世界! 谢谢 编辑: 这样做的目的是允许用户在html页面中输入热敏打印机的代码。打印机需要特殊的字符。我想把这个字符串,“解释”特殊代码,并将其发送到打印机。目前,打印机按原样打印字符串。我能想到的唯一不使用长替换行的方法是使用eval()函数。例如,您可以使用以下选项: function useEscapes(s) { retu

这里有一个简单的

我有一个HTML
,我想允许用户输入转义序列。即:

Hello\nworld\x21
我想让我的脚本“解释”
\n
\x21
以获得:

你好 世界! 谢谢

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

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

function useEscapes(s) {
    return eval('("' + s.replace(/([^\\]|^)(?=(\\\\)*["\n])/g, '$1\\').replace(/\n/g, 'n') + '")');
}
replace
用于确保安全进入
eval()
功能

2016年9月28日编辑:

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

function useEscapes(s) {
    return JSON.parse('"' + s
        .replace(/((^|[^\\])(\\\\)*)"/g, '$1\\\\"') // optional - prevents syntax errors
        + '"');
}
我能想到的唯一不使用长替换行的方法是使用
eval()
函数。例如,您可以使用以下选项:

function useEscapes(s) {
    return eval('("' + s.replace(/([^\\]|^)(?=(\\\\)*["\n])/g, '$1\\').replace(/\n/g, 'n') + '")');
}
replace
用于确保安全进入
eval()
功能

2016年9月28日编辑:

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

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

您在尝试中遇到了什么问题?看起来很像这样:我想您需要制作一个转换器并拆分字符串。另外,对于用于非转义的反斜杠,您的预期输出是什么?例如,
\
应该产生什么,或者
\
?我添加了一个编辑来解释我的needs@vIceBerg,我真的不在乎你对输出做什么。我问你的期望是什么,因为你似乎还没有真正定义行为。对于中的一些输入字符串
,您期望输出字符串为
,要正确回答问题,需要定义好输入和输出期望。就目前而言,你的问题读起来更像是一份工作指令。你还没有试图自己解决这个问题,所以我将投票结束这个问题,因为范围太广了,尽管“不清楚”也是合适的。您在尝试中遇到了什么问题?看起来很像这样:我想您需要制作一个转换器并拆分字符串。另外,对于用于非转义的反斜杠,您的预期输出是什么?例如,
\
应该产生什么,或者
\
?我添加了一个编辑来解释我的needs@vIceBerg,我真的不在乎你对输出做什么。我问你的期望是什么,因为你似乎还没有真正定义行为。对于中的一些输入字符串
,您期望输出字符串为
,要正确回答问题,需要定义好输入和输出期望。就目前而言,你的问题读起来更像是一份工作指令。你还没有尝试自己解决这个问题,所以我将投票决定结束这个问题,因为范围太广,虽然“不清楚”也是合适的。唯一的“错误”是,如果用户的输入字符串中有回车符,函数将返回意外的令牌非法错误。祝
好运“
作为输入,以及向用户打开应用程序,使其能够在不知情的情况下执行任意JavaScript。请说这是疏忽。第二次替换可选。唯一的“错误”是,如果用户的输入字符串中有回车符,函数将返回意外的标记非法错误。祝您好运,
'“
作为输入,以及向用户打开应用程序,使其能够在不知情的情况下执行任意JavaScript。假设这是一个疏忽。第二次替换可选。