The tool
What the zero-width space remover does
Paste text, run it, and every invisible character this cleaner knows is taken out while every visible letter, space and line break stays where it was. A zero-width space, U+200B, is the one people search for, but it almost never travels alone, so this tool handles the whole set rather than that one codepoint.
It runs in your browser. Nothing is uploaded, there is no run limit and no length cap, because no server is involved in the work. Open your network panel and run it if you want to check that rather than take it on trust.
How it works
How to remove zero-width spaces in three steps
There is nothing to preview first, since the whole problem is invisible until the scan runs.
- Step 1
- Paste the text. Use the source you actually copied from, not a retyped version, or the characters will already be gone.
- Step 2
- Run the removal. It happens instantly, on your own machine.
- Step 3
- Copy the result. Every visible character is exactly as it was.
The full list
The 14 invisible characters this remover takes out
This is the exact set, grouped by what each one does. Eleven are deleted outright. Three are space look-alikes, and those are swapped for an ordinary space rather than removed, because a word still needs a space there.
- U+200B zero-width space
- Occupies a position, renders nothing. The most common invisible character in copied text.
- U+200C zero-width non-joiner
- Stops two letters joining. Real typography in Persian, Arabic and several Indic scripts.
- U+200D zero-width joiner
- Fuses characters, including multi-part emoji, into one glyph.
- U+2060 word joiner
- Blocks a line break between two characters. Usually found wedged against a dash.
- U+FEFF byte-order mark
- Belongs at the very start of a file to declare encoding. Stranded mid-document it breaks parsers and feeds.
- U+00AD soft hyphen
- Invisible until a line wraps there, at which point a hyphen appears in a word that never had one.
- U+00A0, U+202F, U+200A
- No-break space, narrow no-break space and hair space. Identical to a normal space on screen, different codepoints underneath. Swapped for a plain space.
- U+202A to U+202E
- Five directional controls: two embeddings, a pop, and two overrides. Built for mixing left-to-right and right-to-left text, and disruptive when left behind.
Scope, stated honestly
Invisible characters this tool does not touch
Unicode has more invisible characters than any one cleaner handles, and a page claiming to remove all of them is usually wrong. These are the ones this tool leaves alone, so you know before you rely on it rather than after.
Variation selectors, U+FE00 to U+FE0F, which alter how a preceding glyph renders. The Mongolian vowel separator, U+180E. The invisible math operators, U+2061 to U+2064. Directional isolates, U+2066 to U+2069, which are a newer mechanism than the embeddings and overrides above.
If your text is failing and none of the 14 above is the cause, one of these is a reasonable next thing to check in a Unicode inspector.
Sources
Where zero-width characters come from
Chat interfaces are the most common source and the reason most people arrive here. The window renders a reply, then hands your clipboard whatever the render produced, and its internal formatting and cursor bookkeeping travels with the text.
- PDF exports
- Justified text uses soft hyphens and unusual spaces to control line breaking. Copying out of a PDF brings them along.
- Word processors
- Non-breaking spaces get inserted to hold a number and its unit together, or a name and its title.
- CMS and rich-text editors
- Zero-width characters mark formatting boundaries so styling survives a copy. They persist after the styling is stripped.
- Translation and localisation tools
- Directional marks get added around mixed-script content and are frequently left behind.
When not to run it
When these characters are doing a real job
Not every instance is residue. A zero-width joiner between two emoji is exactly what composes them into a single glyph, a family or a profession emoji built from separate characters. Strip that joiner and the emoji visually falls apart, so a joiner inside a genuine emoji sequence is left in place.
The zero-width non-joiner carries the same weight in Persian and several Indic scripts, where it interrupts the script's default joining to keep two letters distinct. Text in those languages should have its instances reviewed individually rather than cleaned in bulk, because what reads as noise in English is functional punctuation there.
Consequences
What invisible characters actually break
Inside a heading or a URL slug, a zero-width space splits the string for anything comparing it character by character: search, a regex, an equality check. Two values that look identical refuse to match, because one carries a codepoint the other does not. In a spreadsheet or a CSV import, the same character silently fails a lookup that should have worked.
There is a security dimension that most tool pages skip. The directional overrides above can reorder how text displays without changing what it actually is, which is how a filename or a link can read differently from what it does. Invisible characters are also a known way to conceal instructions inside text that a language model will read and a person will not. Removing them before text enters a system that acts on it is a reasonable precaution, not paranoia.
Who it's for
Who uses a zero-width space remover, and when
Developers cleaning text pulled from documentation, chat exports or PDFs before it enters a codebase, a config file or a commit, since the failure mode otherwise is a syntax error with no visible cause. Publishing and SEO teams when a slug or an on-page search stops matching a heading for no apparent reason.
It is standard in anything doing programmatic comparison: deduplication, data validation, database imports, anywhere two values that should be identical need to actually match byte for byte.