爲了更好地展示和了解字符串逃逸行爲,看看下面的例子:
你可以看到字符串看起來像在內存中被解析由JS引擎通過拆分後的字符串是什麼,從而也解決此問題提供了潛在的(醜陋的)解決方案:
'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"]
基本上單反斜槓以下字符,從而引起意想不到的結果,如果轉義上下文沒有引起重視。
解決方案:
通過查找表,就可以恢復許多錯誤地轉義字符,如果他們撒謊的\x20-\x7F
可打印的ASCII字符範圍之外。例如,對於上面的示例,12
或\x0c
[12..toString(16)
]將變爲'\\'+'v'
,依此類推。
PS:要知道,信息丟失發生,而你試圖通過contextual-或元信息來恢復信息,你的情況,該字符串是可打印的ASCII範圍含義。
請與社區分享任何實施。乾杯!
如果存儲反斜線HTML,你可以用'.replace(/ \\ /克, 「\\\\」);'它。例如,如果在HTML文檔中存在反斜線,那麼你可以去'document.body.innerHTML.replace(/ \\/g,「\\\\」);',它將用雙反斜槓替換所有反斜槓。 – Viliami 2016-11-30 21:59:50