Pour mieux démontrer et comprendre le comportement échapper chaîne , prenez l'exemple suivant:
Vous pouvez voir ce que la chaîne ressemble à la mémoire après avoir été analysé par le JS-moteur en divisant la chaîne, ainsi offrant également des solutions potentielles (laids) autour de cette question:
'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"]
Fondamentalement, le seul anti-slash échappe le caractère suivant, donnant ainsi lieu à des résultats inattendus, si le contexte d'échappements n'est pas respectée.
Solution:
Grâce à une consultation table, vous pouvez restaurer de nombreux personnages se sont échappés errantly si elles se trouvent en dehors de la plage imprimable de caractères ASCII de \x20-\x7F
. Pour l'exemple ci-dessus par exemple, 12
ou \x0c
[12..toString(16)
] deviendrait '\\'+'v'
, et ainsi de suite.
PS: Soyez conscient qu'une perte d'information est produite, et que vous essayez de restaurer des informations par l'information contextual- ou méta-, ce qui signifie dans votre cas que la chaîne est dans la plage ASCII imprimable.
Veuillez partager toute implémentation avec la communauté. À votre santé!
Si vous stockez la barre oblique inverse en HTML, vous pouvez utiliser '.replace (/ \\/g, "\\\\")' avec elle. Par exemple, s'il existe une barre oblique inverse dans le document HTML, vous pouvez alors utiliser 'document.body.innerHTML.replace (/ \\/g," \\\\ ");', qui remplacera toutes les barres obliques inversées par une double barre oblique inverse. – Viliami