Invisible Character Remover
Paste text from ChatGPT, Gemini, Word or a website — the tool highlights hidden characters (zero-width spaces, BOM, soft hyphens, no-break spaces, homoglyphs), counts them by type and gives you clean text to copy.
Clean text
Where the hidden characters were
Remove Invisible Characters and ChatGPT “Watermarks” Online
The tool strips characters you cannot see on screen but that travel to the clipboard with a ChatGPT or Gemini answer, a Word document or text from a website: zero-width spaces, joiners, word joiners, BOM, soft hyphens and bidirectional control marks. No-break and narrow no-break spaces become regular spaces, and homoglyphs (a Cyrillic letter inside an English word and vice versa) are replaced with the right letters. Every character found is highlighted and listed by type with its Unicode code. Runs in your browser, no sign-up.
How to Use
- Paste your text (up to 100,000 characters) or click “Sample”
- Pick the options: spaces, homoglyphs, quotes and dashes (the last one is off by default)
- Click “Clean text”, review the highlights and copy the clean result
FAQ
How to remove invisible characters from AI text
To remove invisible characters, paste the text into the box above and click “Clean text”. The script checks every character, finds the ones you cannot see and builds a clean copy. Below the result you get the same text with highlights: red badges (ZWSP, ZWJ, SHY, BOM) are zero-width characters, purple ones (LRM, RLM, PDF) are control marks, blue ones (NBSP, NNBSP) are special spaces, and a yellow outline marks a look-alike letter from another alphabet. Hover over a badge to see the Unicode code point and name.
The table under the highlights answers “what exactly was in my text”: the character, its code, how many times it appeared and what happened to it — removed, replaced with a regular space or with the correct letter. If you switch an option off, the character stays in the text and is marked “kept”.
ChatGPT hidden characters: what you will find
| Character | Code | Why it causes trouble |
|---|---|---|
| Zero width space (ZWSP) | U+200B | Splits a word for search: “marketing” with a ZWSP inside no longer matches Ctrl+F, and character counts are off. |
| Zero width joiner / non-joiner | U+200D, U+200C | Same problems, and they break slugs and URLs if the text ends up in a page address. |
| Word joiner | U+2060 | Blocks a line break where one is needed. |
| Byte order mark (BOM) | U+FEFF | At the start of a file it breaks PHP headers and JSON; mid-text it breaks search. |
| Soft hyphen | U+00AD | Invisible until the line wraps; confuses search and spell-checkers. |
| No-break and narrow no-break space | U+00A0, U+202F | Look like a space but do not match one in search, string comparison or CSV parsing. |
| Direction marks | U+200E, U+200F, U+202A–202E, U+2066–2069 | Can reorder characters on screen and confuse editors and code review. |
A special case is Unicode tag characters (U+E0020–E007E). Each one encodes an ASCII letter but renders as nothing, so a whole sentence — say, an instruction aimed at a language model — can hide inside normal text. The tool removes tags and shows the text they spelled out. Tags inside emoji flag sequences (such as the flag of England) are left alone.
Is there a ChatGPT watermark in text?
Short answer: there is no confirmed watermark made of hidden characters. OpenAI has publicly discussed statistical watermarking for text but has not announced that it is switched on in ChatGPT. Google uses SynthID Text for Gemini, but that is also a statistical signal: it lives in word choices, not in separate characters.
In 2025 users noticed narrow no-break spaces (U+202F) in answers from some ChatGPT models and called them a watermark. There is no evidence that this is a deliberate mark. Such characters also appear without any intent: from training text, from typography, or when copying from a web interface, Word or Google Docs. The honest framing is that invisible characters are artifacts worth removing before you publish. A “ChatGPT watermark remover” that deletes them does not change a single word, so it has no effect on statistical watermarks or on AI detector scores.
How to remove zero width spaces without a tool
Microsoft Word
Turn on formatting marks (Ctrl+Shift+8): a no-break space shows as a small circle and a soft hyphen as “¬”. In Find and Replace (Ctrl+H) use the special codes ^s for a no-break space and ^- for an optional hyphen. Zero-width characters can be found by code: ^u8203 for U+200B and ^u65279 for the BOM.
Code: JavaScript, PHP, Python
// JavaScript
text = text.replace(/[\u200B-\u200F\u2060-\u2064\uFEFF\u00AD]/g, '').replace(/[\u00A0\u202F]/g, ' ');
// PHP
$text = preg_replace('/[\x{200B}-\x{200F}\x{2060}-\x{2064}\x{FEFF}\x{00AD}]/u', '', $text);
# Python
text = re.sub(r'[\u200b-\u200f\u2060-\u2064\ufeff\u00ad]', '', text)
These one-liners also strip the ZWJ inside emojis, so “👨👩👧” falls apart into three separate faces. The tool on this page checks the neighbouring characters and keeps a ZWJ that sits between two emojis.
VS Code and other code editors
VS Code highlights invisible and ambiguous Unicode characters by default (editor.unicodeHighlight.invisibleCharacters and editor.unicodeHighlight.ambiguousCharacters). If a template or a string from your CMS shows a box around an “empty” spot, it is usually the same ZWSP or NBSP.
Where hidden characters come from when AI is not involved
Invisible characters do not only come from chatbots. Word and Google Docs insert no-break spaces and optional hyphens through autocorrect, PDFs bring line separators (U+2028) and broken hyphenation when you copy from them, websites ship ­ and in their markup, and messengers add direction marks to messages that mix Arabic or Hebrew with Latin text. A BOM nearly always comes from a file saved as “UTF-8 with BOM” in Windows Notepad or a similar editor. So it pays to clean any text assembled from several sources, not just AI answers.
How to confirm the text is clean
Paste the result back into the box and run the cleaner again: “No hidden characters found” means the job is done. A second quick test is to compare character counts before and after in the word counter — the difference equals the number of zero-width characters removed. In your CMS, switch to the HTML or code view after pasting: there should be no ​, ‌ or ­ left.
Homoglyphs: a Cyrillic letter inside an English word
Cyrillic а, е, о, р, с, у, х and capitals А, В, Е, К, М, Н, О, Р, С, Т, Х look exactly like Latin letters. A word like “password” typed with a Cyrillic “а” reads normally but fails search, spell-check and exact matching in search engines and databases. The tool looks at each word: if it mixes two alphabets, the minority letters are replaced with their twins from the main alphabet. Words written entirely in one alphabet are not touched, so a Russian or Ukrainian quote inside English text stays intact.
No-break spaces: when to keep them
Space replacement is on by default because no-break and narrow spaces in chatbot output are usually accidental. But typesetters use them on purpose — between a number and its unit (“10 km”), in French punctuation, in thousands separators. If your text has already been through an editor or is going to print, untick the option: the spaces will still be highlighted but left in place.
A quick pre-publishing checklist
- Clean the text here and copy the result.
- If it is full of em dashes, curly quotes and markdown, run it through the AI text cleaner.
- Need a formal report with mark types for a client or an editor? Use the watermark detector.
- Whether a text reads as AI-written is a question of style, not Unicode — check it with the AI detector.
RankBotAI — AI SEO Optimization for WordPress
RankBotAI AI plugin automatically finds and fixes SEO issues in WordPress products and posts — no manual editing.