より良い次の例を取る、文字列エスケープ行動を示し、理解する:
あなたは、このように、文字列は、文字列を分割して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:は、情報の損失が発生したことに注意してください、とあなたは文字列が印刷可能なASCII範囲であるあなたのケースで意味を、contextual-またはメタ情報を介して情報を復元しようとしています。
すべての実装をコミュニティと共有してください。乾杯!それに `;
はあなたが使用することができます' .replace(/ \\/gで、 "\\\\")。たとえば、HTML文書にバックスラッシュがある場合、 'document.body.innerHTML.replace(/ \\/g、" \\\\ ");'を実行すると、すべてのバックスラッシュを二重のバックスラッシュに置き換えます。 – Viliami