本文介绍了如何“重新启用” javascript中的特殊字符序列?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我有一个已定义的String变量(例如):

If I have a defined String variable as (e.g.) :

 var testString="not\\n new line";

它的价值当然是不是新行

但如果直接使用not\\\
new line
,测试字符串将包含新行。

But if use directly "not\n new line" the test string will contain new line.

那么将 testString 转换为包含新行和所有其他特殊字符序列的字符串的最简单方法是什么?被双重反斜杠禁用?
使用替换?如果它用于unicode字符序列,它看起来会花费很多时间。

So what is the easiest way to turn the testString to a string that contains a new line and all other special character sequences that are "disabled" with double backslashes?Using replaces? It look like it will take a lot of time if it used for unicode characters sequnces.

推荐答案

JSON.parse('"' + testString + '"')

将解析JSON并解释JSON转义序列,涵盖所有JS转义序列,除了 \ x hex, \v ,以及非标准八分之一。

will parse JSON and interpret JSON escape sequences which covers all JS escape sequences except \x hex, \v, and the non-standard octal ones.

人们会告诉你 eval 它。别。 eval 因此非常强大,而且额外的功率会带来XSS漏洞的风险。

People will tell you to eval it. Don't. eval is hugely overpowered for this, and that extra power comes with the risk of XSS vulnerabilities.

var jsEscapes = {
  'n': '\n',
  'r': '\r',
  't': '\t',
  'f': '\f',
  'v': '\v',
  'b': '\b'
};

function decodeJsEscape(_, hex0, hex1, octal, other) {
  var hex = hex0 || hex1;
  if (hex) { return String.fromCharCode(parseInt(hex, 16)); }
  if (octal) { return String.fromCharCode(parseInt(octal, 8)); }
  return jsEscapes[other] || other;
}

function decodeJsString(s) {
  return s.replace(
      // Matches an escape sequence with UTF-16 in group 1, single byte hex in group 2,
      // octal in group 3, and arbitrary other single-character escapes in group 4.
      /\\(?:u([0-9A-Fa-f]{4})|x([0-9A-Fa-f]{2})|([0-3][0-7]{0,2}|[4-7][0-7]?)|(.))/g,
      decodeJsEscape);
}

这篇关于如何“重新启用” javascript中的特殊字符序列?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-28 21:05