HTML Entities Reference
All 2,125 HTML entity names, searchable by name, character, code point or Unicode name, with every escape form ready to copy.
96 common entities in 8 groups. Search covers all 2,125 names.
HTML entities: names, numbers and when you need them
This reference lists every named character reference in the HTML standard: 2,125 names for 1,511 characters. The list is closed, so a name that is not on it, such as &heart;, is not an entity, and the browser shows it as typed. Many characters have several names: →, → and → are all →. Where a character had a name in HTML 4, that name is listed first, since older parsers know only those.
Search takes a name with or without the & and the semicolon, the character itself, a code point (U+00A9, 0xA9, © or \u00A9) or words that describe it, from its Unicode name, such as “black heart”, or from everyday use, such as “pipe” or “trademark”. Pick a row to see every way to write the character, from the decimal reference to the CSS and JavaScript escapes. In a page saved as UTF-8 you rarely need a reference at all: type the character, and escape only & and <, plus the quote around an attribute value. To convert a whole block of text, use the HTML Entity Encoder / Decoder.
Built and maintained by Meet Shah · Last updated
What this tool is used for
- Finding the name for a character by pasting it or describing it, such as “black heart” for
♥. - Checking whether a character has a name at all, and getting its numeric reference when it does not, as for emoji.
- Turning a character such as U+00A0 into an HTML reference, a CSS escape or a JavaScript escape.
- Cleaning up old markup full of
’and–by finding the characters they really stand for. - Telling look-alike characters apart: the hyphen, en dash, em dash and minus sign, or
⟨and<.
How it works in practice
A worked example
A newsletter exported from a CMS shows “Price: 20” wherever the editor typed a non-breaking space, and the developer looks the character up to see where the  comes from.
non-breaking space
No-break space NO-BREAK SPACE · U+00A0 Names:   Decimal:   Hex:   CSS: \00A0 JavaScript: \u00A0 JSON: \u00A0 Python: \u00A0 UTF-8 bytes: C2 A0 URL-encoded: %C2%A0
The UTF-8 row holds the answer: a no-break space is stored as the two bytes C2 A0. Read as Windows-1252, the usual fallback for English text with no declared charset, each byte becomes a character of its own, so C2 shows as  and A0 as a no-break space again. The fix is to declare the encoding the file really uses, with <meta charset="utf-8"> in the head or a charset in the Content-Type header. Swapping the character for would hide this one symptom, while é, — and ’ go on breaking the same way, as é, — and ’.
The edge case that catches people
Characters past U+FFFF need more care, and 133 of the named ones live there, such as 𝔄 (𝔄, U+1D504). JavaScript's \u escape holds exactly four hex digits, so \u1D504 is read as U+1D50 followed by the digit 4; write \u{1D504} or the surrogate pair \uD835\uDD04. JSON has no braced form and needs the pair, and Python needs \U0001D504, while HTML's 𝔄 and CSS's \1D504 take the code point as it is.
When not to use this tool
Do not escape user input or database text by looking characters up here one at a time. Let the template engine's automatic escaping handle it, or a library function made for that context, since a missed character there is a security hole rather than a typo. To convert a whole block of text at once, the HTML Entity Encoder / Decoder is quicker than copying references by hand.
Frequently Asked Questions
- Which characters must always be escaped?
- In text,
<and&;>is escaped only by convention. In an attribute value,&and the quote that delimits the value. Escape the ampersand first: done last, it turns the<you just wrote into&lt;, which shows as a literal < on the page. - What is the difference between named and numeric entities?
- Names such as
©exist for 1,511 characters, under 2,125 names, and are case-sensitive:‡is ‡ and†is †. Numeric references such as©or©work for every character, including emoji and the rest that have no name. - Do I still need entities for accented characters?
- No, not with a UTF-8 document. Writing
édirectly is clearer and shorter; entities for accents are a legacy of pages served in ASCII-only encodings. - What is a non-breaking space actually for?
- Preventing a line break between two things that belong together — a number and its unit, a name and its initial. Using several in a row to create indentation is a misuse that breaks on narrow screens.
- Why does my ampersand break the page?
- In text,
©=2becomes©=2, because 106 old names such as©and¬are read even without the semicolon. In an attribute, one followed by=, a letter or a digit is left alone, sohref="?a=1©=2"survives, but?a=1¬_b=2becomes?a=1¬_b=2. Write a literal&as&. - Why does
break my RSS feed or SVG file? - Both are XML, which defines only five names:
&,<,>,"and'. Any other name is a fatal undefined-entity error, so the whole file fails to parse. Use the number, , or the character itself. - Why does
–show an en dash? - HTML reads numeric references from 128 to 159 as Windows-1252, the old Windows encoding, rather than as the control characters Unicode puts there:
–is –,’is ’ and€is €. Search such a reference here to see what it gives.
Common errors and gotchas
- Using
'in markup that older software will parse: HTML 4.01 never defined it, while'works everywhere. - Escaping every non-ASCII character, which bloats markup unnecessarily on a UTF-8 page.
- Leaving off the semicolon: only 106 old names are read without it, so
©works while&hellipstays on the page as typed. - Escaping only
<and>inside an attribute, where quotes and ampersands matter too. - Treating entity escaping as XSS protection, which is context-dependent.
- Following a CSS escape with a space or a hex digit:
content: "\00A9 2026"shows ©2026, since one space after an escape only ends it, and"\00A92026"is read as U+A920 followed by 26. Put two spaces after it. - Copying
⟨and⟩from an HTML 4 table: HTML5 moved them from U+2329 and U+232A to the mathematical angle brackets U+27E8 and U+27E9, so the page shows a different character from the one the table lists.