HTMLエスケープ関数

いいライブラリがあるのかもしれないけど、今回のプロジェクトでは使えないので、自作。

function htmlEscape(str) {
  return str.replace(/<|>|&|'|"|\s/g, function(s){
    var map = {"<":"&lt;", ">":"&gt;", "&":"&amp;", "'":"&#39;", "\"":"&quot;", " ":"&nbsp;"};
    return map[s];
  });
}

上のだとすっきり書けるけど、無名関数辺りの最適化がどのように行われるか不明。なので、下のようにクロージャにして初期化を確実に1回に抑える方がより安心。

var htmlEscape = (function(){
  var map = {"<":"&lt;", ">":"&gt;", "&":"&amp;", "'":"&#39;", "\"":"&quot;", " ":"&nbsp;"};
  var replaceStr = function(s){ return map[s]; };
  return function(str) { return str.replace(/<|>|&|'|"|\s/g, replaceStr); };
})();