JSFiddle - React, Tailwind, and code Playground
HTML
Look in the console.
JavaScript
Object.defineProperty(String, "cook", {
value(strings, ...subs) {
const {length} = strings;
if (length <= 0) {
return "";
}
let s = strings[0];
for (let i = 1; i < length; ++i) {
s += String(subs[i-1]) + strings[i];
}
return s;
},
configurable: true,
writable: true
});
const escapeHTML = val => String(val).replace(/&/g, "&").replace(/</g, "<");
const escape = (strings, ...subs) => {
return String.cook(strings, ...subs.map(escapeHTML));
};
const foo = "<script>alert('maliciousness!');<\/script>";
console.log(escape`<p>${foo}</p>`);
// => <p><script>alert('maliciousness!');</script></p>