Javascript - Replacing the escape character in a string literal

前端 未结 4 613
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-03 05:38

I am trying to replace the backslash (escape) character in a Javascript string literal.

I need to replace it with a double backslash so that I can then do a redirec

4条回答
  •  攒了一身酷
    2020-12-03 06:14

    To better demonstrate and understand the string-escaping behavior, take the following example:

    You can see what the string looks like in memory after being parsed by the JS-engine by splitting the string, thus also offering potential (ugly) solutions around this issue:

    'file:///C:\funstuff\buildtools\viewer.html'.split('')
    //>
     ["f", "i", "l", "e", ":", "/", "/", "/", "C", ":", "", "u", "n", "s", "t", "u",
      "f", "f", "", "u", "i", "l", "d", "t", "o", "o", "l", "s", "", "i", "e", "w",
      "e", "r", ".", "h", "t", "m", "l"]
    
    'file:///C:\funstuff\buildtools\viewer.html'.split('').map( function(e){
         return e.charCodeAt()
    });
    //>
    [102, 105, 108, 101, 58, 47, 47, 47, 67, 58, 12, 117, 110, 115, 116, 117, 102,
     102, 8, 117, 105, 108, 100, 116, 111, 111, 108, 115, 11, 105, 101, 119, 101, 
     114, 46, 104, 116, 109, 108]
    //>in Hex values by applying .toString(16)
    ["66", "69", "6c", "65", "3a", "2f", "2f", "2f", "43", "3a", "c", "75", "6e", 
     "73", "74", "75", "66", "66", "8", "75", "69", "6c", "64", "74", "6f", "6f", 
     "6c", "73", "b", "69", "65", "77", "65", "72", "2e", "68", "74", "6d", "6c"]
    

    Basically the single backslash escapes the following character, thus giving rise to unexpected results, if the escaping-context is not heeded.

    Solution:

    Through a look-up-table, you can restore many errantly escaped characters if they lie outside the printable ASCII character range of \x20-\x7F. For the example above for instance, 12 or \x0c [ 12..toString(16) ] would become '\\'+'v', and so on.

    PS: Be aware that a loss of information occured, and you are trying to restore information through contextual- or meta- information, meaning in your case that the string is in the printable ASCII range.

    Please share any implementations with the community. Cheers!

提交回复
热议问题