【问题标题】:Javascript \x escapingJavascript \x 转义
【发布时间】:2015-12-03 01:53:09
【问题描述】:

我见过一些其他的程序有这样的东西:

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

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

【问题讨论】:

  • 那些程序可以(也应该)只使用var string = '2 `xnz\x9c\x89';,并没有什么不同。
  • 确实是这样,不过我现在还不太习惯,一般都是打个字符而已。

标签: processing javascript string escaping ascii processing


【解决方案1】:

如果你有一个想要转义的字符串,你可以使用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));
      })
    

    或者,如果您可以确定输入的安全性并且性能不重要,则可以选择eval1

      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('')
    

【讨论】:

  • 谢谢!我试试看。
猜你喜欢
  • 1970-01-01
  • 2013-04-19
  • 2011-04-06
  • 1970-01-01
  • 1970-01-01
  • 2014-01-09
  • 1970-01-01
相关资源
最近更新 更多