มีปัญหาเกี่ยวกับรหัสโซลูชันของคุณ - มันจะหลบหนีการเกิดขึ้นครั้งแรกของอักขระพิเศษแต่ละตัวเท่านั้น ตัวอย่างเช่น:
escapeHtml('Kip\'s <b>evil</b> "test" code\'s here');
Actual: Kip's <b>evil</b> "test" code's here
Expected: Kip's <b>evil</b> "test" code's here
นี่คือรหัสที่ทำงานอย่างถูกต้อง:
function escapeHtml(text) {
return text
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
}
ปรับปรุง
โค้ดต่อไปนี้จะให้ผลลัพธ์ที่เหมือนกันกับด้านบน แต่มันจะทำงานได้ดีขึ้นโดยเฉพาะในกลุ่มข้อความขนาดใหญ่ (ขอบคุณjbo5112 )
function escapeHtml(text) {
var map = {
'&': '&',
'<': '<',
'>': '>',
'"': '"',
"'": '''
};
return text.replace(/[&<>"']/g, function(m) { return map[m]; });
}