Zero-Width Space Remover
Zero-width spaces, joiners, byte-order marks and soft hyphens render as nothing at all, and break search, code and data anyway. Paste your text and every one of them is marked in place with its Unicode name before a single character is removed.
Characters that exist without appearing.
A zero-width space is a real character. It has a code point, it takes up storage, it counts toward a character limit, and every piece of software that handles your text treats it as a character standing between the letters on either side. It just has no width, so there is nothing on screen to see.
That combination is what makes them difficult. A problem you can see is a problem you can fix. This one presents as software behaving incorrectly: a search that finds nothing, a command that will not run, an import that fails on the first column, a form that rejects an address you have checked three times. The text looks right in every case, because the text is right. There is simply something in it that no display will show you.
Eight families turn up often enough to matter, and they are not interchangeable. Some are always spurious in English prose. Others are doing real work in the right context, which is why removing everything indiscriminately is the wrong default.
Eight families, and what each one is for.
Each of these has a legitimate purpose somewhere. The trouble starts when it arrives somewhere else by copy and paste.
- Zero-width space
U+200BThe one people mean when they say zero-width space. It marks a point where a line may break, which is why editors insert it into long URLs and unbroken strings. It has no width, cannot be selected, and splits a word in two as far as any search is concerned. - Zero-width non-joiner
U+200CStops two characters forming a ligature. It is genuinely meaningful in Persian, Arabic and several Indic scripts, and completely spurious in English text, where it arrives by copy and paste and does nothing but break matching. - Zero-width joiner
U+200DBinds characters together. It is what holds a multi-part emoji into one glyph, so removing it from emoji breaks them apart into their components. In ordinary prose it has no business being there at all. - Word joiner
U+2060Prevents a line breaking at that point without adding any width. It is the invisible counterpart of a non-breaking space, and it survives every copy and paste unnoticed. - Byte-order mark
U+FEFFOnce a signal at the start of a file describing its encoding, now deprecated in that role and still turning up mid-text after file conversions. A leading BOM is a common reason a CSV import fails on the very first column name. - Soft hyphen
U+00ADA hyphen that appears only if the word needs to break across a line, and is invisible the rest of the time. Word processors insert them freely. Search for the word and you will not find it, because as far as the search is concerned there is a character in the middle. - Mongolian vowel separator
U+180EReclassified as a format character in Unicode 6.3, which means it now renders as nothing. It appears in text that has passed through older software and serves no purpose in anything else. - Invisible operators
U+2062 to U+2064Invisible times, invisible separator and invisible plus, from mathematical notation. They carry meaning inside a formula and nothing at all outside one, where they simply corrupt string comparisons.
How an invisible character announces itself.
Never directly. It surfaces as something else failing, which is why the cause is usually found last.
- Search and findThis is the most common symptom and the least understood. A zero-width space inside a word means a search for that word finds nothing, in your browser, your document, your CMS and your database alike. The text on screen is correct, the search is correct, and there is no match. Nothing in the interface explains why.
- Code and configurationA zero-width character in a source file produces syntax errors that point at lines which look perfectly valid. Copying a command from a blog post or a chat window into a terminal is the classic route: the command reads correctly and fails with an unexpected token, because there is a character in it you cannot see.
- Databases and spreadsheetsTwo records that look identical do not match, so joins fail, deduplication misses, and one category becomes two in a pivot table. A byte-order mark at the head of a CSV attaches itself to the first column name and breaks the import outright.
- Forms and validationAn email address carrying an invisible character fails validation with no visible reason. The user retypes what looks like the same address, it fails again, and support cannot reproduce it because their own typing is clean.
- Word and character countsCharacter counts include what they cannot display, so a field that accepts 280 characters rejects text that visibly contains fewer. Meta descriptions, SMS fields and social posts all truncate earlier than they should.
- URLs and slugsA zero-width character in a URL produces a link that looks right and resolves to nothing. Pasted into a CMS it becomes part of the slug, and the page is served on an address nobody can retype.
Six ways they get into your text.
- AI writing toolsAssistant output routinely carries zero-width characters and non-breaking spaces, inserted for line wrapping in long strings, around URLs, and inside formatted code blocks. Some of it is deliberate marking; most of it is layout. Either way it travels with the text when you copy it.
- Word processorsWord inserts soft hyphens and optional break points as part of its own layout. Google Docs adds non-breaking spaces when content is moved between documents. Neither shows you, because neither considers it content.
- Websites and CMSsContent management systems convert HTML entities into characters on the way out, so a ‌ written years ago becomes a real zero-width non-joiner in your copy. Scraped text and email-to-plain-text conversions carry the same artefacts.
- Messaging and mobile keyboardsChat applications use zero-width joiners for emoji sequences and their own formatting. Autocorrect on both major mobile platforms contributes its share. Text pasted out of a chat thread is rarely as plain as it looks.
- File conversion and encodingByte-order marks are left behind by encoding changes, database exports and PDF extraction. This is the category that produces a single invisible character at the very start of a file, which is precisely where it does the most damage.
- Ordinary copy and pasteMoving text between a browser, an editor and a document can introduce characters that none of those applications displays. Syntax highlighters are a frequent culprit, since the invisible characters they use to control wrapping come along with the code.
Why the usual advice does not work.
Every method here is worth knowing. Three of the four have a limit that is not obvious until you have already relied on it.
Find and replace
You cannot type a zero-width space into a find box, which is the practical problem. The workaround is to paste one in, and to have one to paste you need to have already found it. Some editors accept a code point directly, which works if you know exactly which of the eight characters you are hunting.
Regular expressions
In an editor that supports Unicode escapes, a character class listing the code points will match them. It is exact and it is unforgiving: miss one code point and the text still fails, with no indication of which one you missed. This is a reasonable approach for a file you control and a poor one for text pasted from elsewhere.
Paste as plain text
Pasting without formatting strips styling. It does not strip invisible characters, because they are characters rather than formatting. This is the most common piece of wrong advice on the subject, and it is worth knowing that it does not work before you rely on it.
Retyping the text
It works, completely and reliably, and it is the only manual method that needs no knowledge of Unicode. It is also the reason people spend an afternoon retyping a paragraph that a scan would have fixed in a second.
Invisible characters are not surplus whitespace.
Two different problems arrive in the same paragraph and need different tools. This one handles characters that render as nothing: zero-width spaces, joiners, byte-order marks, soft hyphens, and the variation and tag ranges. No amount of looking will reveal them, so the tool names each one it finds.
Surplus whitespace is the opposite: entirely visible, if you know to look. Trailing spaces, doubled gaps, stray tabs and stacked blank lines are all ordinary characters doing too much. The ChatGPT space remover and the AI space remover handle that side, and text that has been through an assistant usually needs both.
The ChatGPT text cleaner on the homepage runs both jobs together, which is what an AI-written draft usually needs.
If what you are chasing is specifically AI watermarking rather than invisible characters generally, the per-model tools go further: they cover the attributes and markers particular to each assistant, for ChatGPT, Claude, Gemini and Grok.
Zero-width character questions.
What is a zero-width space?
A Unicode character, U+200B, that occupies no visual width. It marks a point where a line may break. On screen it is nothing at all, but it is a real character in the text, so it counts toward character limits, splits words for the purposes of search, and breaks comparisons between strings that look identical.
How do I find invisible characters in text?
Paste it above. Every invisible character is marked in place with its Unicode name, so you can see where they are before anything is removed. Finding them is genuinely the hard part: by definition nothing on screen indicates their presence, which is why the problem usually surfaces as a failed search or a syntax error rather than as something you notice.
Why does my search not find text that is clearly there?
Almost always a zero-width space inside the word. The search engine sees two fragments where you see one word, so it correctly reports no match for the whole word. This affects browser find, document search, CMS search and database queries in exactly the same way.
Does pasting as plain text remove zero-width characters?
No, and this is the most common misconception about them. Paste-as-plain-text removes formatting: fonts, colours, bold, links. Zero-width characters are not formatting, they are characters, so they survive it completely intact.
Will removing invisible characters change my text?
Not the part you can read. Letters, numbers, punctuation, line breaks and paragraph structure are all preserved exactly. The one thing worth knowing is that emoji built from several code points are held together by a zero-width joiner, so stripping those from an emoji-heavy text can split composite emoji into their parts.
What is the difference between a zero-width space and a normal space?
A normal space, U+0020, has width and separates words visibly. A zero-width space has no width at all and separates them invisibly. That difference matters because a search treats both as a break, but only one of them looks like one.
Should I remove non-breaking spaces too?
Usually, but not always, which is why they are a separate option here and why they are converted to ordinary spaces rather than deleted. A non-breaking space is often doing a real job, holding a number and its unit on the same line. Deleting it outright would weld the words either side together.
What is a byte-order mark and why is it at the start of my file?
U+FEFF, originally a signal describing a file's encoding. It is left behind by encoding conversions, database exports and text extracted from PDFs. Because it sits at the very beginning, it attaches itself to the first field of a CSV and breaks the import before anything else has a chance to fail.
Do zero-width characters affect SEO?
Indirectly. They can end up in slugs, titles and meta descriptions, where they consume the character budget invisibly and cause truncation earlier than expected. They also break internal search on your own site. There is no evidence of a ranking penalty; the harm is that things quietly stop working.
Are zero-width characters used to watermark AI text?
Some AI output does carry them, though most of what turns up is line-wrapping and layout rather than deliberate marking. If tracing AI-specific characters is what you are after, the watermark tools cover that ground properly, with a per-model breakdown.
How many invisible characters does this remove?
Thirty-six named characters plus three ranges covering variation selectors and tag characters, which is 420 code points in total. The ranges matter more than they sound: a tag-character sequence can encode an entire hidden message that renders as nothing at all.
What are variation selectors and tag characters?
Two families of invisible code points, U+FE00 to U+FE0F and U+E0000 to U+E007F. Variation selectors choose between alternate glyph forms. Tag characters were deprecated and later revived for flag sequences, and they can carry arbitrary data invisibly, which is why both are stripped from ordinary prose.
Is it safe to run this on code?
Yes, and it is one of the better reasons to use it. Invisible characters in source produce errors that point at lines which look fine. Nothing in the tool touches indentation, line endings or any visible character, so the code comes back identical apart from the characters that should never have been in it.
Does it work on Arabic, Hebrew or Persian text?
Yes, with one thing to check. Directional marks are meaningful in right-to-left text, so that option is off by default and should stay off. Zero-width non-joiners are also load-bearing in Persian and several Indic scripts, so review what is marked before removing it.
Is my text uploaded anywhere?
No. Everything runs in your browser. Nothing is transmitted, nothing is stored, and closing the tab discards it, which makes it usable on material you could not paste into a server-side tool.
Is there a limit on how much text I can clean?
No. Nothing is uploaded, so there is no request size to exceed. Very long documents may take a moment to render the marked view on an older device.
What is the difference between this and the space remover?
This tool handles characters you cannot see. The space remover handles whitespace you can: trailing spaces, double spaces, tabs and blank lines. They are different problems with different fixes, and text that has been through an AI tool often has both.