Escape a string for use in HTML or the inverse
$ npm install escape-goat
import {htmlEscape, htmlUnescape} from 'escape-goat';
htmlEscape('π¦ & π');
//=> 'π¦ & π'
htmlUnescape('π¦ & π');
//=> 'π¦ & π'
htmlEscape('Hello <em>World</em>');
//=> 'Hello <em>World</em>'
const url = 'https://sindresorhus.com?x="π¦"';
htmlEscape`<a href="${url}">Unicorn</a>`;
//=> '<a href="https://sindresorhus.com?x="π¦"">Unicorn</a>'
const escapedUrl = 'https://sindresorhus.com?x="π¦"';
htmlUnescape`URL from HTML: ${escapedUrl}`;
//=> 'URL from HTML: https://sindresorhus.com?x="π¦"'
Escapes the following characters in the given string
argument: &
<
>
"
'
The function also works as a tagged template literal that escapes interpolated values.
Note: This method of escaping is only safe when inserting data into normal tags like body
, div
, p
, b
, td
, etc. Inserting htmlEscape
'd data into tags like script
and style
opens your app to XSS vulnerabilities.
Unescapes the following HTML entities in the given htmlString
argument: &
<
>
"
'
The function also works as a tagged template literal that unescapes interpolated values.
Ensure you always quote your HTML attributes to prevent possible XSS.
I couldn't find one I liked that was tiny, well-tested, and had both escape and unescape methods.