Unprofane

Invisible characters

Copy a blank character for a name or a message, or paste text to find the ones hiding in it.

0 / 20,000
Try
See through them in your app, with one call

Every invisible character, ready to copy

Each with its code point, the way to write it in HTML and a button that copies it.

CharacterCode pointHTMLWhat it doesCopy
Zero-width characters No width at all: the ones people mean by an invisible character.
Zero width space ZWSPU+200B​No width at all. The usual way to split a word a filter is looking for.
Zero width non-joiner ZWNJU+200C‌Keeps two letters from joining. Persian and several Indian scripts need it.
Zero width joiner ZWJU+200D‍Joins emoji into one, as in 👩‍💻, and letters in some scripts.
Word joiner WJU+2060⁠A zero width space that also forbids a line break.
Zero width no-break space BOMU+FEFFThe byte order mark. At the start of a file it is metadata; anywhere else it hides.
Blank letters Drawn as an empty letter. Games and chat apps that refuse a blank name often take these.
Hangul fillerU+3164ㅤA blank Korean letter. The usual blank name in games and chat.
Hangul choseong fillerU+115FᅟA blank Korean initial consonant.
Hangul jungseong fillerU+1160ᅠA blank Korean vowel.
Halfwidth Hangul fillerU+FFA0ᅠThe half-width blank Korean letter.
Braille pattern blankU+2800⠀A braille cell with no dots: a blank that counts as a letter.
Format characters Formatting with nothing to draw, most of them deprecated.
Soft hyphen SHYU+00AD­Shows a hyphen only where a line breaks; invisible mid-line.
Combining grapheme joiner CGJU+034F͏A combining mark that draws nothing.
Mongolian vowel separator MVSU+180E᠎A space until Unicode 6.3; now it draws nothing.
Khmer vowel inherent aqU+17B4឴A Khmer vowel Unicode deprecated; it draws nothing.
Khmer vowel inherent aaU+17B5឵A Khmer vowel Unicode deprecated; it draws nothing.
Function applicationU+2061⁡An invisible maths operator.
Invisible timesU+2062⁢An invisible maths operator.
Invisible separatorU+2063⁣An invisible maths comma.
Invisible plusU+2064⁤An invisible maths operator.
Inhibit symmetric swappingU+206AA deprecated shaping control; it draws nothing.
Activate symmetric swappingU+206BA deprecated shaping control; it draws nothing.
Inhibit Arabic form shapingU+206CA deprecated shaping control; it draws nothing.
Activate Arabic form shapingU+206DA deprecated shaping control; it draws nothing.
National digit shapesU+206EA deprecated shaping control; it draws nothing.
Nominal digit shapesU+206FA deprecated shaping control; it draws nothing.
Direction controls They set which way text runs.
Left-to-right mark LRMU+200E‎Sets the direction of the text around it. Invisible.
Right-to-left mark RLMU+200F‏Sets the direction of the text around it. Invisible.
Arabic letter mark ALMU+061C؜A right-to-left mark for Arabic text.
Left-to-right embedding LREU+202A‪Starts a run of left-to-right text.
Right-to-left embedding RLEU+202B‫Starts a run of right-to-left text.
Pop directional formatting PDFU+202C‬Ends an embedding or an override.
Left-to-right override LROU+202D‭Forces the text after it left to right.
Right-to-left override RLOU+202E‮Shows the text after it backwards: "gpj.exe" reads as "exe.jpg".
Left-to-right isolate LRIU+2066⁦Starts an isolated left-to-right run.
Right-to-left isolate RLIU+2067⁧Starts an isolated right-to-left run.
First strong isolate FSIU+2068⁨Starts a run in the direction of its first letter.
Pop directional isolate PDIU+2069⁩Ends an isolate.
Odd spaces They look like a space and are not one, so a search or a split misses them.
No-break space NBSPU+00A0 Looks like a space, but a word on either side never splits.
En quadU+2000 A space half an em wide.
Em quadU+2001 A space an em wide.
En spaceU+2002 A space half an em wide.
Em spaceU+2003 A space an em wide.
Three-per-em spaceU+2004 A third of an em.
Four-per-em spaceU+2005 A quarter of an em.
Six-per-em spaceU+2006 A sixth of an em.
Figure spaceU+2007 The width of a digit.
Punctuation spaceU+2008 The width of a full stop.
Thin spaceU+2009 A narrow space.
Hair spaceU+200A The narrowest space.
Narrow no-break space NNBSPU+202F A thin space that never breaks.
Medium mathematical space MMSPU+205F A space for formulas.
Ideographic spaceU+3000 A space as wide as a Chinese character.
Line separatorU+2028
A line break some apps honor and some ignore.
Paragraph separatorU+2029
A paragraph break some apps honor and some ignore.

How invisible characters slip past a filter

Unprofane takes each one out, or reads it as its Latin letter, before it reads the words.

Caught, by trick: the Scunthorpe Test, rules alone, 2026-10-20

Your users hide words this way

Every check reads through them before it reads the words, and tells you which trick it found.

Get your API key

100 checks a day, no card

curl -X POST https://api.unprofane.com/v1/check \
  -H "Authorization: Bearer up_test_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"nice game, f\u200buck you","context":"chat"}'
Response200
{
  "allowed": false,
  "action": "block",
  "evasion": [
    "zero_width"
  ],
  "matches": [
    {
      "text": "f\u200buck you",
      "normalized": "fuck you",
      "evasion": [
        "zero_width"
      ]
    }
  ],
  "censored": "nice game, *********"
}

Invisible characters, answered

What is an invisible character?
An invisible character takes up a place in text but draws nothing, or draws a blank: a zero width space, a blank Korean letter, a braille cell with no dots. Apps count it as a character, so it can fill a name that may not be empty, or sit inside a word with no gap to see. The table has every one, each with a copy button.
How do I copy a blank character for a name?
Press Copy beside the Hangul filler (U+3164) at the top of this page, then paste it where the name goes. It is a blank Korean letter, the usual blank name in games and chat. Where an app trims it or draws a box, try the Braille pattern blank (U+2800).
How do I remove invisible characters from text?
Paste the text into the detector and press Copy clean text. The clean copy has the invisible characters taken out, odd spaces made plain and look-alike letters made Latin, and you can turn each of those off. Emoji joiners and the joiners a script needs stay unless you say otherwise, and nothing leaves your browser.
Can invisible characters get a word past a profanity filter?
Yes, past a filter that matches letters as typed: a zero width space inside a word leaves two harmless pieces. Unprofane takes them out before it reads the words and names the trick; on the Scunthorpe Test's public split the rules alone caught 99.7% of words split by zero-width characters (run of 2026-10-20).
Can invisible characters hide instructions for an AI model?
Yes. Unicode tags spell ASCII without drawing it, so a page, an email or a pasted prompt can carry a line a person never sees and a model reads in full. The detector reads the line out; strip tags from anything you pass to a model.
What is a right-to-left override?
An invisible control (U+202E) that shows the text after it reversed. A file named invoice_2026[RLO]fdp.exe reads as a PDF and runs as a program, and in source code the same controls can make a line read differently from how it compiles. The detector marks each one where it stands.
Which invisible characters are not in the table?
The variation selectors and the Unicode tags, named by range rather than listed. The 256 variation selectors (U+FE00 to U+FE0F and U+E0100 to U+E01EF) pick a form of the character before them; the tags (U+E0000 to U+E007F) are an invisible copy of every ASCII character. The detector reads both, and reads out any text spelled in them.

More free tools