HTMLのマークアップ記号を、エスケープする方法について解説します。
次の関数ではマークアップの記号を正規表現で検索し、マッチした文字を対応する文字参照 (character reference) の文字列に置換して返します。
function escapeHTML( text ) { var replacement = function( ch ) { var characterReference = { '"':'"', '&':'&', '\'':''', '<':'<', '>':'>' }; return characterReference[ ch ]; } return text.replace( /["&'<>]/g, replacement ); }
匿名関数を使用すれば、この処理は
var escapedText = text.replace( /["&'<>]/g, function( ch ) { return { '"':'"', '&':'&', '\'':''', '<':'<', '>':'>' }[ ch ]; } );
のようにも書けます。またアロー関数式がサポートされるならば、次のようにも表せます。
var escapedText = text.replace( /["&'<>]/g, ch => { return { '"':'"', '&':'&', '\'':''', '<':'<', '>':'>' }[ ch ] } );
ところでPrototype.jsを使用すれば、String.escapeHTML()で同様に処理できます。ただしこのメソッドが対象とするのは、
の3文字だけです。ちなみに逆の変換をするunescapeHTML()もありますが、これも同様の3文字だけを対象としています。