Skip to main content

HTML Decoder

Decode HTML entities back to readable text — named entities and numeric references.

Runs in your browser — your data never leaves your deviceFree, no sign-up
Decoded text

The decoded text will appear here.

How it works

HTML allows special characters to be written as entities — either by name (&, é) or by numeric codepoint in decimal (—) or hex (—). Decoding replaces each entity with the character it stands for.

A single pass is used, so already-decoded text is never re-interpreted. The tool reports how many entities it found and left any unrecognized ones alone.

Features

  • Named entities: XML predefined, Latin-1, common typography
  • Decimal and hexadecimal numeric references
  • Astral-plane codepoints (emoji) via codepoint-aware decoding
  • Unknown entities left untouched — no data loss
  • 100% client-side — nothing leaves your browser

How to use

  1. Paste the HTML-encoded text.
  2. Press Decode.
  3. Copy the decoded text or download it as a file. The counter shows how many entities were decoded.

Example

Input:  café & crème 🎉
Output: café & crème 🎉

Frequently asked questions

Which entities does this decoder support?
The five XML/HTML predefined entities (& < > " '), the full Latin-1 set (nbsp, eacute, ndash, copy, reg and neighbours), common typographic and currency entities (mdash, lsquo, ldquo, hellip, euro, trade, bull, check), and every numeric form — decimal like é and hexadecimal like é.
Does it support all 2,200+ named entities in the HTML5 standard?
No. It covers the named entities that appear in practice — the Latin-1 block, typographic punctuation, currency symbols and other common characters. Rare named entities are left untouched rather than guessed. Any character can always be written as a numeric reference, which this tool fully supports.
What happens to text that is not a valid entity?
Nothing — it is left exactly as written. An ampersand followed by text that is not a recognized entity (for example &unknownname; or a bare &) stays in the output unchanged. Numeric references to invalid Unicode codepoints (above U+10FFFF or in the surrogate range) are also left untouched.
Why do I see a space where   was?
The non-breaking space (U+00A0) is decoded to its real character, which looks like an ordinary space but is a different codepoint. If you copy the output into a document, the non-breaking behaviour is preserved — that's the correct result.
Is my text sent to a server?
No. Decoding happens entirely in your browser with JavaScript. Nothing you type is transmitted anywhere — you can verify this in your browser's network inspector.