Để chứng minh tốt hơn và hiểu được chuỗi thoát hành vi, lấy ví dụ sau đây:
Bạn có thể xem những gì các chuỗi trông giống như trong bộ nhớ sau khi được phân tích bởi JS-động cơ thông qua việc tách chuỗi, do đó mang đến tiềm năng các giải pháp (xấu xí) xung quanh vấn đề này:
'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"]
về cơ bản các dấu chéo ngược đơn thoát nhân vật sau đây, do đó dẫn đến kết quả bất ngờ, nếu thoát ngữ cảnh không được chú ý.
Giải pháp:
Qua một cái nhìn lên bảng xếp hạng, bạn có thể khôi phục nhiều errantly thoát nhân vật nếu họ nằm ngoài phạm vi có thể in ký tự ASCII của \x20-\x7F
. Ví dụ: ví dụ ở trên, 12
hoặc \x0c
[12..toString(16)
] sẽ trở thành '\\'+'v'
, v.v.
PS: Hãy nhận biết rằng một sự mất mát thông tin xảy ra, và bạn đang cố gắng để khôi phục lại thông tin thông qua thông tin contextual- hoặc meta, có nghĩa là trong trường hợp của bạn rằng chuỗi là trong phạm vi ASCII in được.
Vui lòng chia sẻ mọi triển khai với cộng đồng. Chúc mừng!
Nếu bạn lưu trữ các dấu chéo ngược trong HTML bạn có thể sử dụng '.replace (/ \\/g, "\\\\");' với nó. ví dụ: nếu có dấu gạch chéo ngược trong tài liệu HTML, thì bạn có thể truy cập 'document.body.innerHTML.replace (/ \\/g," \\\\ ");', sẽ thay thế tất cả các dấu gạch chéo ngược bằng dấu gạch chéo ngược kép. – Viliami