NodeJS で EJS テンプレートから HTML 属性をエンコードするにはどうすればよいですか。私は次のようなことをする必要があります:
<img onmouseover=<% myString %> />
myString は適切にエスケープされ、引用符で囲まれて有効な属性になります。
これを試すことができます:
npm install node-html-encoder
app.locals.encoder = require('node-html-encoder').Encoder;
<%= encoder.htmlEncode('<foo /> "bar"') %>
簡潔な答え:
myString = myString.replace(/'|\\/g, '\\$&');
ただし、HTML の特殊文字もエスケープする必要がある場合は、次を試すことができます。
myString = myString.replace(/&/g, '&');
myString = myString.replace(/</g, '<');
myString = myString.replace(/>/g, '>');
PS HTML 文字の置換を使用して JavaScript 演算子をエスケープしないように注意してください。