JavaScriptまたはES6を使用して HTMLエンティティ をエンコードまたはデコードするネイティブな方法はありますか?たとえば、<
は<
としてエンコードされます。 Node.jsには html-entities
のようなライブラリがありますが、この一般的なニーズを既に処理しているJavaScriptに何かが組み込まれているように感じます。
Htmlをエスケープするためにes6を使用する素敵な関数:
const escapeHTML = str => str.replace(/[&<>'"]/g,
tag => ({
'&': '&',
'<': '<',
'>': '>',
"'": ''',
'"': '"'
}[tag] || tag));
Libのない純粋なJSの場合、 純粋なJavascriptを使用してHTMLエンティティをエンコードおよびデコード このようにできます:
let encode = str => {
let buf = [];
for (var i = str.length - 1; i >= 0; i--) {
buf.unshift(['&#', str[i].charCodeAt(), ';'].join(''));
}
return buf.join('');
}
let decode = str => {
return str.replace(/&#(\d+);/g, function(match, dec) {
return String.fromCharCode(dec);
});
}
使用法:
encode("Hello > © <") // "Hello > © <"
decode("Hello > © © <") // "Hello > © © <"
ただし、、このアプローチにはいくつかの欠点があります:
H
→H
>
使用法:
he.encode('foo © bar ≠ baz ???? qux');
// Output : 'foo © bar ≠ baz 𝌆 qux'
he.decode('foo © bar ≠ baz 𝌆 qux');
// Output : 'foo © bar ≠ baz ???? qux'