Invisible Character Detector and Finder
Hidden Unicode sneaks into text through copy and paste more often than people expect: a zero-width space from a CMS editor, a soft hyphen from a PDF, a directional override from a pasted command. They render as nothing, so search misses the word, a checksum fails, and a code reviewer sees the same string you do. Paste the text below and this page lists every hit with its code point, then offers removal, escaping, or replacement. The scan runs locally.
Find Hidden Characters in Any Text
Input text
Paste text from an email, a code file, or a CMS field, then scan.
Scan results
Cleaning actions
Actions read the current input and write the result into the output box.
How It Works
The page walks the pasted string one code unit at a time and compares each character against a bundled table of invisible code points. When a character matches, the scan records its code, name, group, running count, and the positions where it appears, plus a short snippet with the invisible character shown in angle brackets.
Results update as you type, so the hit list and the count line stay in step with the textarea. The group line under the count shows which families are present, such as zero-width 2 and bidi 1, and groups with no hits are left out.
Cleaning actions read the current input and write a new string into the output box. Remove drops every found code, escape prints each one as backslash-u notation, and replace swaps each one for a plain ASCII hyphen. The restore button copies the input back into the output box unchanged, and the scan never rewrites the input itself.
| Group | Members | What it does |
|---|---|---|
| zero-width | 200B, 200C, 200D | Draws nothing; splits words for search and equality |
| bidi | 200E, 200F, 202A-202E, 2066-2069 | Reorders displayed text; hides real extensions |
| format | 00AD, 034F, 2060-2064 | Guides rendering; soft hyphen breaks wrap points |
| space | 00A0, 180E, 2007, 202F, 205F, 3000 | Looks like a space; survives trim and split checks |
| separator | 2028, 2029 | Acts like a newline without being one |
| bom | FEFF, FFFE, FFFF | Encoding marker; stray copies break parsers |
Before and After
Invoice for pay⟨200B⟩pal.com
vis⟨00AD⟩ible line item Invoice for paypal.com
visible line item report⟨202E⟩gnp.exe report\u202Egnp.exe Use Cases
| Scenario | What to check | Result |
|---|---|---|
| Inbox triage | A support email fails a keyword check with no visible cause | Hit list names the zero-width separators |
| Code review | A pull request edits a string that looks untouched | Positions line points at the exact offsets |
| CMS quality checks | A page title misses its own keyword in search | Escape action reveals the codes for a ticket |
| Phishing drills | A link label resembles a bank domain | Detector flags the bidi and homograph setup |
Common Mistakes
- Trusting the rendered preview. A zero-width character shows nothing on screen, so eyeballing the text cannot rule it out; run the scan.
- Normalizing the string before checking. Form converters and trim functions can drop the very characters you are hunting; paste the raw text.
- Removing characters without a record. Note the code and positions first so the source of the paste can be fixed at the origin.
- Assuming only exotic files carry them. Emails, CMS fields, PDFs, and chat apps all pass them through without warning.
Best Practices
- Scan anything pasted from an email, a CMS field, or a chat message before it enters a repository or a database.
- Keep the escaped copy in the bug report so a reviewer can see the exact codes without special fonts.
- Strip found characters at the source, such as the editor that inserted them, rather than cleaning every export by hand.
- Use the positions list to jump to the offset in an editor that can show code points.
Frequently Asked Questions
What is an invisible character?
It is a Unicode code point that either draws no glyph or looks like an ordinary space. Zero-width spaces and joiners fall into the first group; no-break spaces, line separators, and soft hyphens fall into the second. This page checks the text against a bundled list of thirty-three of them.
Why do zero-width characters break search and checksums?
A search index treats a word and the same word with a zero-width space inside as different strings, so a document stops matching its own keywords. Checksums and signatures hash every code unit, so one hidden character changes the digest and a verification fails for no visible reason.
How do bidirectional controls hide text?
Right-to-left override and isolate characters reorder the glyphs that follow them. A filename such as report, then the override, then gnp.exe can display as reportexe.png in a file manager while the real extension stays exe. Review tools that print the raw string make the trick visible.
Can these characters carry phishing risks?
Yes. Homograph tricks pair lookalike letters from different alphabets with zero-width separators, so a domain in a link bar can resemble a bank while resolving elsewhere. Pasted tokens and license keys with hidden joiners also fail after a copy through a CMS or email client.
Does scanning change my text?
No. The scan reads the string exactly as pasted and never normalizes whitespace or Unicode forms, so zero-width characters survive every round trip through this page. Cleaning actions write to the output box only, and the input keeps its original characters until you edit it.
What does the escape action produce?
Each found code is replaced by its backslash-u notation, so a zero width space becomes the six visible characters backslash, u, 2, 0, 0, B. That form survives copy-paste through tools that strip hidden characters and is easy to grep in a log.
Which groups does the detector cover?
Six: zero-width, bidi, format, space, separator, and bom. The list includes zero width space, non-joiner, joiner, soft hyphen, no-break and figure spaces, line and paragraph separators, the full set of directional controls, and byte order markers.