솔루션 코드에 문제가 있습니다. 각 특수 문자의 첫 번째 항목 만 이스케이프합니다. 예를 들면 다음과 같습니다.
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]; });
}