Javascript \x 转义

Javascript \x escaping

我看到其他一些程序也有类似这样的内容:

var string = '\x32\x20\x60\x78\x6e\x7a\x9c\x89';

而且我不得不尝试 fiddle 使用数字和字母来找到我想要显示的文本。
我想知道是否有一个函数可以找到字符串的 \x 转义符,例如 JS 中的 string.toUpperCase() 。我正在使用 JS,但我可以使用其他编程语言来查找 \x.

的 ASCII

如果您有要转义的字符串,可以使用 String.prototype.charCodeAt()

如果你有带转义的代码,你可以只计算它们以获得原始字符串。如果它是一个带有文字转义的字符串,你可以使用 String.fromCharCode()

  • 如果你有 '\x32\x20\x60\x78\x6e\x7a\x9c\x89' 并且想要 "2 `xnz" 那么

      '\x32\x20\x60\x78\x6e\x7a\x9c\x89' == "2 `xnz"
    
  • 如果你有 '\x32\x20\x60\x78\x6e\x7a\x9c\x89' 这是一个值为 \x32\x20\x60\x78\x6e\x7a\x9c\x89 的文字字符串,那么你可以通过将每对十六进制数字的十进制值传递给 String.prototype.fromCharCode()

      '\x32\x20\x60\x78\x6e\x7a\x9c\x89'.replace(/\x([0-9a-f]{2})/ig, function(_, pair) {
        return String.fromCharCode(parseInt(pair, 16));
      })
    

    或者,如果您可以确定输入的安全性并且性能不重要,eval 是一个选项1.

      eval('"\x32\x20\x60\x78\x6e\x7a\x9c\x89"')
    

    请注意 " 嵌套在输入字符串周围的 ' 中。

    如果您知道它是一个程序,并且它来自受信任的来源,您可以直接 eval 字符串,这不会给您 ASCII,但会执行程序本身。

      eval('\x32\x20\x60\x78\x6e\x7a\x9c\x89')
    

    请注意,您提供的输入不是程序,eval 调用失败。

  • 如果你有 "2 `xnz" 并且想要 '\x32\x20\x60\x78\x6e\x7a\x9c\x89' 那么

      "2 `xnz".split('').map(function(e) {
        return '\x' + e.charCodeAt(0).toString(16);
      }).join('')