元になった記事
innerHTMLは"をエスケープしてくれるとは限らない
-- innerText(textContent)/innerHTMLを使ったHTMLエスケープは充分でないので今すぐやめろ、お前たちはもう終わりだ - TODESKING
String#replaceは引数にfunctionを渡せる
functionの第一引数はマッチした部分文字列そのものを保持するので、マッピングテーブルオブジェクトに渡して変換するこんな感じでどうだろう。なんかオシャレな気がするので。
function escapeHtml(content) {
var TABLE_FOR_ESCAPE_HTML = {
"&": "&",
"\"": """,
"<": "<",
">": ">"
};
return content.replace(/[&"<>]/g, function(match) {
return TABLE_FOR_ESCAPE_HTML[match];
});
}
ブラウザの対応状況とかは調べてないけど、たぶんモダンブラウザなら動くと思う。