ソリューションコードに問題があります-特殊文字の最初の出現のみをエスケープします。例えば:
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]; });
}