"category": "dev-utility",

HTML Unescape Tool

"tldr": Paste text full of &, <, — and read it as plain text - named, decimal, and hex entities all decoded.

Decode HTML entities back into readable characters: named entities (&, ©, —), decimal references (—), and hex references (🎉) all become their real characters, emoji included.

{"html entities": "text"}

Entity-encoded text shows up wherever HTML was flattened into data: scraped pages, RSS feeds, CMS exports, and APIs that double-encode. When your UI displays "Fish & Chips", this is the tool that shows you how many layers deep the encoding goes.

How to decode HTML entities

  1. 1Paste the entity-encoded text.
  2. 2Named (&), decimal (—), and hex (🎉) entities are decoded; unknown sequences pass through untouched.
  3. 3If the output still contains entities, the source was double-encoded - run it again.
  4. 4Copy the clean text.

Convert HTML entities to Text in code

Python
import html

html.unescape("Fish & Chips — ©2026")
# 'Fish & Chips — ©2026'
JavaScript (browser)
const unescapeHtml = (s) => {
  const el = document.createElement("textarea");
  el.innerHTML = s;
  return el.value;
};

Frequently asked questions

Why does my text say & - what happened?

Double encoding: "&" was escaped to "&", then that string was escaped again, turning its & into & - yielding &. Each pipeline stage escaped without checking. Decode twice here to read it; fix it upstream by escaping exactly once, at final output.

Will decoding scraped content make it safe to display?

The opposite - decoding turns inert &lt;script&gt; text back into live <script> markup. Decode to *read* or process text, but if you re-display user-derived content in HTML, escape it again at output. Decoding is for humans and data pipelines, not a sanitizer.

Which named entities are supported?

The ones that appear in real-world data: the XML five plus the common typography and symbol set (dashes, quotes, ©®™, currency, «», °±×÷µ…). All numeric references work universally, so anything exotic still decodes via &#NNNN; form.

Last updated:

You might also need

Free and in-browser, like everything on JSON Console. Browse all tools →