Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Javascript \x escaping

I've seen a few other programs that have something like this:

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

And I had to try to fiddle with the numbers and letters, to find the text I wanted to display.
I'm wondering if there is a function to find the \x escape of a string, like string.toUpperCase() in JS. I'm using processingJS, but it will be okay for me to use other programming languages to find the ASCII for \x.

like image 527
HarryJamesPotter27 Avatar asked Dec 03 '15 01:12

HarryJamesPotter27


People also ask

How do you escape brackets in JavaScript?

To use a special character as a regular one, prepend it with a backslash: \. . That's also called “escaping a character”.

What can I use instead of escape in JavaScript?

JavaScript escape() The escape() function is deprecated. Use encodeURI() or encodeURIComponent() instead.

What characters need to be escaped JavaScript?

Any character with a character code lower than 256 (i.e. any character in the extended ASCII range) can be escaped using its hex-encoded character code, prefixed with \x . (Note that this is the same range of characters that can be escaped through octal escapes.)

What does escaping mean in JavaScript?

An escape character enables you to output characters you wouldn't normally be able to, usually because the browser will interpret it differently to what you intended. In JavaScript, the backslash ( \ ) is an escape character.


1 Answers

If you have a string that you want escaped, you can use String.prototype.charCodeAt()

If you have the code with escapes, you can just evaluate them to get the original string. If it's a string with literal escapes, you can use String.fromCharCode()

  • If you have '\x32\x20\x60\x78\x6e\x7a\x9c\x89' and want "2 `xnz" then

      '\x32\x20\x60\x78\x6e\x7a\x9c\x89' == "2 `xnz"
    
  • If you have '\\x32\\x20\\x60\\x78\\x6e\\x7a\\x9c\\x89' which is a literal string with the value \x32\x20\x60\x78\x6e\x7a\x9c\x89 then you can parse it by passing the decimal value of each pair of hex digits to 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));
      })
    

    Alternatively, eval is an option if you can be sure of the safety of the input and performance isn't important1.

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

    Note the " nested in the ' surrounding the input string.

    If you know it's a program, and it's from a trusted source, you can eval the string directly, which won't give you the ASCII, but will execute the program itself.

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

    Note that the input you provided is not a program and the eval call fails.

  • If you have "2 `xnz" and want '\x32\x20\x60\x78\x6e\x7a\x9c\x89' then

      "2 `xnz".split('').map(function(e) {
        return '\\x' + e.charCodeAt(0).toString(16);
      }).join('')
    
like image 103
arcyqwerty Avatar answered Sep 30 '22 17:09

arcyqwerty