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

Checks 33 invisible code points Input stays in this tab.

Input text

Paste text from an email, a code file, or a CMS field, then scan.

Scan results

No invisible characters found

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

Before (pasted from an email)
Invoice for pay⟨200B⟩pal.com
vis⟨00AD⟩ible line item
After (remove all found)
Invoice for paypal.com
visible line item
Before (filename with an override)
report⟨202E⟩gnp.exe
After (escaped as backslash-u)
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.