HTML Entity Decoder – Convert HTML Entities Back to Readable Text

Turn encoded HTML back into plain text. This decoder handles named, decimal, and hexadecimal entities in one pass, with an optional tag stripper, a per-entity analysis table, and a reference of 60+ common entities. Free, private, and runs entirely in your browser.

Input & Settings

Decode mode
Decode mode: Converts named, decimal, and hex HTML entities back to readable characters. Switch to Encode to go the other way.

Output

Decoded plain text
Input chars
0
Output chars
0
Entities
0
Decoded plain text
Entity analysis 0 decoded
EntityFormCode pointCharCount

Common HTML entities reference

Click any row to load that character into the input. Use the search box to filter by character, name, or description.

CharNamedDecimalHexDescription

What is HTML entity decoding?

HTML entity decoding is the reverse of entity encoding. It takes strings like &lt;p&gt;, &#60;, or &#x3C; and turns them back into the characters they represent — in this case <p>. The browser does this automatically when it renders a page, but when you're working with raw HTML source, API responses, scraped data, or database exports, the entities stay visible until something decodes them.

That's what this tool is for. Paste the encoded string, and the decoder returns the readable characters so you can see what the content actually says without mentally translating &amp; to & every few words.

Everything runs locally in your browser. The text you paste never leaves your device, and there's no signup or usage limit.

When you need to decode HTML entities

Decoding comes up in a handful of recurring situations. These are the most common:

  • API responses and JSON payloads. CMS APIs, RSS feeds, and e-commerce endpoints often return HTML-encoded strings inside JSON fields. Decoding makes the content readable before you inspect or reuse it.
  • Scraped or copied web content. Text copied from a rendered page sometimes carries entities with it, especially from <pre> blocks, code samples, and old CMS exports.
  • Double-encoded data. When content passes through multiple systems that each apply their own escaping, you end up with &amp;lt; instead of &lt;. The first decode unwraps one layer; running the result through again unwraps the second.
  • Email templates and legacy HTML. Older email systems sometimes store content as entity-encoded HTML. Decoding lets you review the actual text before sending or editing.
  • Database exports and log files. Raw column dumps and application logs often contain escaped HTML that's easier to read once decoded.

Named, decimal, and hex entities — all in one pass

The HTML spec defines three ways to write an entity reference. This decoder handles all three simultaneously, so you don't need to pick a mode or run the input through multiple times.

FormExampleDecodes toNotes
Named&copy;©Human-readable, defined by the HTML standard. About 2,000 exist.
Decimal&#169;©Unicode code point in base 10. Works for any character.
Hex&#xA9;©Unicode code point in base 16. Common in CSS and JavaScript contexts.

The decoder also tolerates missing semicolons for common entities like &amp and &lt, which appear in hand-written or legacy HTML that doesn't strictly follow the spec. Numeric entities above the Basic Multilingual Plane — emoji, for example — are decoded with String.fromCodePoint, so surrogate pairs are handled correctly.

Decoding vs stripping tags: what's the difference?

These two operations are often confused, and the order matters:

  • Decoding entities turns &lt;p&gt; into <p>. The angle brackets appear as literal text.
  • Stripping tags removes real HTML markup like <p>Hello</p> and leaves only the text content: Hello.

If you strip tags first and then decode, encoded tags like &lt;p&gt; survive the strip (because they aren't real tags yet) and then become literal <p> text after decoding. That's usually what you want when you're extracting visible content from a fragment that mixes real markup and escaped code samples.

If you decode first and then strip, the decoded tags become real markup and get removed — which would delete exactly the code sample you were trying to preserve. This tool applies stripping before decoding for that reason, and only when you enable the option.

Frequently asked questions

An HTML entity decoder converts entity references like &lt;, &#60;, and &#x3C; back into the characters they represent — in this case the less-than sign. It's the reverse of HTML entity encoding and is used to turn encoded HTML, scraped data, and API responses back into readable text.
It handles all three standard HTML entity formats in a single pass: named entities like &copy;, decimal entities like &#169;, and hexadecimal entities like &#xA9;. It also tolerates missing semicolons for common entities such as &amp and &lt.
When enabled, actual HTML tags in the input are removed before entity decoding. This is useful when you want the text content of an HTML fragment rather than its markup. Encoded tags like &lt;div&gt; are preserved as literal text <div> after decoding, because they weren't real tags in the input.
The input is likely double-encoded — meaning an entity was encoded twice, like &amp;lt; instead of &lt;. Run the decoded output through the tool a second time to unwrap the second layer. Double-encoding commonly happens when data passes through multiple systems that each apply their own escaping.
Decoding itself is safe because this tool only displays text in a textarea, never renders it as HTML. However, if you paste the decoded output into a web page or CMS that renders HTML, any decoded tags will become active markup. Only do that with content you trust, or encode it again before rendering.
Yes. JSON strings often contain HTML-encoded content, especially from CMS APIs, RSS feeds, and scraped data. Paste the string values into the decoder to turn entities like &quot; and &amp; back into readable characters. Note that the decoder only touches entities; it doesn't parse or validate the JSON structure itself.
Yes. Emoji are represented as numeric entities above the Basic Multilingual Plane, like &#128293; for the fire emoji. The decoder uses String.fromCodePoint, so it correctly handles surrogate pairs and returns the actual emoji character.
After decoding, the analysis panel lists every distinct entity that was found, its format (named, decimal, or hex), the Unicode code point it maps to, the decoded character, and how many times it appeared. This helps you spot unexpected entities and verify exactly what changed.
Absolutely. Everything runs in your browser. The text you paste never leaves your device — there is no server processing, no logging, and no data storage.
Yes. The tool is fully responsive and works on phones, tablets, and desktops.
Yes. Once the page loads, the decoder works without an internet connection. All processing happens locally in your browser using JavaScript.