02.1Invisible characters

Invisible character detector

Paste text or code to find the characters you cannot see: zero-width spaces, no-break spaces, byte order marks, bidi controls, tag characters, and Cyrillic or Greek letters posing as Latin ones. Each comes with its line, column, code point and name.

or drop a file on this box

1!BOMconst greeting = "HelloZWSPworld";
2!if (accessLevel != "userRLO LRI// Check if adminPDI LRI") {
3!Sign in at pаypal.com or support.аррӏе.com to continue.
4Москва and Αθήνα are written in one script each.
5!Price:NBSP100NBSPEUR, softSHYhyphen, family 👨ZWJ👩ZWJ👧 and ❤VS16.
6!Hidden note:TAGTAGTAGTAGTAGTAGTAGTAGTAGTAGTAGTAGTAGTAGTAGTAG

Found

31 of 34 selected

34 found, 31 selected for fixing.

  • Bidirectional controls4
  • Tag characters16
  • Look-alike letters6
  • Zero-width & invisible5
  • Variation selectors1
  • Unusual spaces2

Tag characters spell out hidden text: ignore the rules

FixLine:colCharCode pointNameFix
RLOU+202ERIGHT-TO-LEFT OVERRIDECan make code display in a different order than it runs (Trojan Source).remove
LRIU+2066LEFT-TO-RIGHT ISOLATECan make code display in a different order than it runs (Trojan Source).remove
PDIU+2069POP DIRECTIONAL ISOLATECan make code display in a different order than it runs (Trojan Source).remove
LRIU+2066LEFT-TO-RIGHT ISOLATECan make code display in a different order than it runs (Trojan Source).remove
TAGU+E0069TAG LATIN SMALL LETTER ITag characters are invisible and can spell out hidden text.remove
TAGU+E0067TAG LATIN SMALL LETTER GTag characters are invisible and can spell out hidden text.remove
TAGU+E006ETAG LATIN SMALL LETTER NTag characters are invisible and can spell out hidden text.remove
TAGU+E006FTAG LATIN SMALL LETTER OTag characters are invisible and can spell out hidden text.remove
TAGU+E0072TAG LATIN SMALL LETTER RTag characters are invisible and can spell out hidden text.remove
TAGU+E0065TAG LATIN SMALL LETTER ETag characters are invisible and can spell out hidden text.remove
TAGU+E0020TAG SPACETag characters are invisible and can spell out hidden text.remove
TAGU+E0074TAG LATIN SMALL LETTER TTag characters are invisible and can spell out hidden text.remove
TAGU+E0068TAG LATIN SMALL LETTER HTag characters are invisible and can spell out hidden text.remove
TAGU+E0065TAG LATIN SMALL LETTER ETag characters are invisible and can spell out hidden text.remove
TAGU+E0020TAG SPACETag characters are invisible and can spell out hidden text.remove
TAGU+E0072TAG LATIN SMALL LETTER RTag characters are invisible and can spell out hidden text.remove
TAGU+E0075TAG LATIN SMALL LETTER UTag characters are invisible and can spell out hidden text.remove
TAGU+E006CTAG LATIN SMALL LETTER LTag characters are invisible and can spell out hidden text.remove
TAGU+E0065TAG LATIN SMALL LETTER ETag characters are invisible and can spell out hidden text.remove
TAGU+E0073TAG LATIN SMALL LETTER STag characters are invisible and can spell out hidden text.remove
аU+0430CYRILLIC SMALL LETTER ACyrillic letter in a mostly Latin word; looks like “a”.→ a
аU+0430CYRILLIC SMALL LETTER ACyrillic letter in a mostly Latin domain name; looks like “a”.→ a
рU+0440CYRILLIC SMALL LETTER ERCyrillic letter in a mostly Latin domain name; looks like “p”.→ p
рU+0440CYRILLIC SMALL LETTER ERCyrillic letter in a mostly Latin domain name; looks like “p”.→ p
ӏU+04CFCYRILLIC SMALL LETTER PALOCHKACyrillic letter in a mostly Latin domain name; looks like “l”.→ l
еU+0435CYRILLIC SMALL LETTER IECyrillic letter in a mostly Latin domain name; looks like “e”.→ e
BOMU+FEFFBYTE ORDER MARKA UTF-8 byte order mark at the start of the file. Some tools (shells, PHP, older parsers) choke on it.remove
ZWSPU+200BZERO WIDTH SPACEInvisible; breaks string comparison, search and identifiers.remove
SHYU+00ADSOFT HYPHENOnly visible where a line breaks; breaks search inside words.remove
ZWJU+200DZERO WIDTH JOINERPart of an emoji sequence (it joins the emoji either side).remove
ZWJU+200DZERO WIDTH JOINERPart of an emoji sequence (it joins the emoji either side).remove
VS16U+FE0FVARIATION SELECTOR-16Selects emoji or text style for the character before it; normal.remove
NBSPU+00A0NO-BREAK SPACE→ space
NBSPU+00A0NO-BREAK SPACE→ space

What it looks for

  • Zero-width characters (U+200B, U+200C, U+200D, U+2060, U+FEFF) and fillers that render as nothing. They break string comparisons, search and identifiers.
  • Unusual spaces: the no-break space and the other Unicode spaces, which look like ordinary spaces but are not matched by many parsers.
  • Bidirectional controls. Overrides and isolates can make code display in a different order than the compiler reads it, the “Trojan Source” attack.
  • Tag characters and variation selector runs, which can carry hidden text; it is decoded for you.
  • Control characters, the byte order mark and soft hyphens.
  • Look-alike letters: a Cyrillic or Greek letter inside an otherwise Latin word (or the other way round), and domain names whose labels mix scripts. Words written entirely in Cyrillic or Greek are not flagged.

Suggested fixes are ticked: invisible characters are removed, unusual spaces become ordinary spaces and look-alikes become the Latin letter they imitate. Joiners inside emoji and Persian or Indic words are listed but left alone. Untick anything you want to keep.

Questions

Why does my code fail on a line that looks fine?

A zero-width space or a no-break space copied from a web page or chat is a common cause. To a compiler it is a different character, so an identifier or keyword no longer matches.

Is the byte order mark a problem?

Usually not in editors, but shell scripts, PHP files, CSV importers and some JSON parsers choke on it. The tool lists it as BOM when it is the first character.

Is my text sent anywhere?

No. The scan runs in your browser as you type.