sindresorhus/escape-goat

&🐐; Escape a string for use in HTML or the inverse

JavaScript

556

32 commits

updated Jul 23, 2026

See the code

README

escape-goat

Escape a string for use in HTML or the inverse

Install

npm install escape-goat

Usage

import {htmlEscape, htmlUnescape} from 'escape-goat';

htmlEscape('πŸ¦„ & 🐐');
//=> 'πŸ¦„ & 🐐'

htmlUnescape('πŸ¦„ & 🐐');
//=> 'πŸ¦„ & 🐐'

htmlEscape('Hello <em>World</em>');
//=> 'Hello &lt;em&gt;World&lt;/em&gt;'

const url = 'https://sindresorhus.com?x="πŸ¦„"';

htmlEscape`<a href="${url}">Unicorn</a>`;
//=> '<a href="https://sindresorhus.com?x=&quot;πŸ¦„&quot;">Unicorn</a>'

const escapedUrl = 'https://sindresorhus.com?x=&quot;πŸ¦„&quot;';

htmlUnescape`URL from HTML: ${escapedUrl}`;
//=> 'URL from HTML: https://sindresorhus.com?x="πŸ¦„"'

API

htmlEscape(string)

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.

htmlUnescape(htmlString)

Unescapes the following HTML entities in the given htmlString argument: &amp; &lt; &gt; &quot; &#39;

The function also works as a tagged template literal that unescapes interpolated values.

Tip

Ensure you always quote your HTML attributes to prevent possible XSS.

FAQ

Why yet another HTML escaping package?

I couldn't find one I liked that was tiny, well-tested, and had both escape and unescape methods.

caprine
escape
goat
goats
html
javascript
nodejs

sindresorhus/escape-goat

&🐐; Escape a string for use in HTML or the inverse

JavaScript

556

32 commits

updated Jul 23, 2026

See the code

README

escape-goat

Escape a string for use in HTML or the inverse

Install

npm install escape-goat

Usage

import {htmlEscape, htmlUnescape} from 'escape-goat';

htmlEscape('πŸ¦„ & 🐐');
//=> 'πŸ¦„ &amp; 🐐'

htmlUnescape('πŸ¦„ &amp; 🐐');
//=> 'πŸ¦„ & 🐐'

htmlEscape('Hello <em>World</em>');
//=> 'Hello &lt;em&gt;World&lt;/em&gt;'

const url = 'https://sindresorhus.com?x="πŸ¦„"';

htmlEscape`<a href="${url}">Unicorn</a>`;
//=> '<a href="https://sindresorhus.com?x=&quot;πŸ¦„&quot;">Unicorn</a>'

const escapedUrl = 'https://sindresorhus.com?x=&quot;πŸ¦„&quot;';

htmlUnescape`URL from HTML: ${escapedUrl}`;
//=> 'URL from HTML: https://sindresorhus.com?x="πŸ¦„"'

API

htmlEscape(string)

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.

htmlUnescape(htmlString)

Unescapes the following HTML entities in the given htmlString argument: &amp; &lt; &gt; &quot; &#39;

The function also works as a tagged template literal that unescapes interpolated values.

Tip

Ensure you always quote your HTML attributes to prevent possible XSS.

FAQ

Why yet another HTML escaping package?

I couldn't find one I liked that was tiny, well-tested, and had both escape and unescape methods.

caprine
escape
goat
goats
html
javascript
nodejs

Project health

Overall

3.8/10

Maintained

0/10

Code review

4/10
OpenSSF Scorecard

Latest release

4.0.0 Β· Apr 16, 2021

Releases this year

0

Significant stargazers

Sam Verschueren

823 followers Β· starred May 2017

Kevin MΓ₯rtensson

1,684 followers Β· starred May 2017

silverwind

670 followers Β· starred Mar 2024

Harminder Virk

2,634 followers Β· starred Sep 2022