GhostGlyph

Invisible Character Detector & Cleaner

Paste any text and GhostGlyph exposes the characters you cannot see — zero-width spaces, bidi overrides, sneaky spaces, AI copy-paste artifacts and look-alike homoglyphs — then strips them in one click.

Unlimited Free Usage No signup • No watermark

🧭 Input bench

0 chars

👁 Annotated output

Your scan results appear here. Flagged characters glow red, AI-style punctuation indigo, homoglyphs amber — hover any flag for details.

Clean options

Recent scans (kept in this browser only)

No scans yet — run your first scan above.

🔒 Everything runs inside your browser. Your text is never uploaded, stored or sent anywhere.

Invisible Characters Are Hiding in Your Text — Here Is How to Find Them

Every character on this page has a code point — a number assigned by the Unicode standard that tells your computer exactly which symbol to draw. Most of the time, what you see is what you get. But Unicode also defines dozens of characters that render as nothing at all: zero-width spaces, invisible joiners, direction-control marks and tag characters that survive copy-paste while remaining completely invisible in editors, browsers and chat apps. A sentence can look perfectly ordinary while carrying a dozen extra code points you never typed.

This matters far beyond curiosity. A zero-width space wedged inside a password or a discount code makes it silently wrong when pasted into a form. A non-breaking space in a spreadsheet column breaks VLOOKUP-style matching because the computer sees a different character than you do. Copy-paste from Word, PDFs and AI chatbots routinely injects curly quotes, em dashes, narrow no-break spaces and byte-order marks that trip up code editors, LaTeX compilers, CSV imports and content-management systems. Security researchers even track "Trojan Source" attacks, where bidirectional override characters flip the visual order of code so that what reviewers read is not what the machine executes. The common thread: the human eye cannot audit what it cannot see, so you need a detector that shows you the raw code points.

The Usual Suspects: Zero-Width Characters

The most common invisible culprits live in the Unicode general-punctuation block. The zero-width space (U+200B) is the classic: it takes up no horizontal space and has no glyph, yet it is a real character that breaks string equality — "hello" and "hello\u200B" look identical but are different strings. Its siblings include the zero-width non-joiner (U+200C) and zero-width joiner (U+200D), which legitimately control ligature formation in scripts like Arabic and Devanagari, and also appear inside complex emoji sequences such as family emoji. Because they are invisible, they are also abused: pasted AI output, "anti-plagiarism" spinners and fingerprinting scripts sprinkle them between words where readers never notice.

GhostGlyph flags each of these individually and shows exactly where they sit in your text. When you clean them, the joiners are removed while ordinary letters and legitimate emoji are preserved. A good rule of thumb: if you did not type the zero-width character deliberately — for example to shape a ligature in Persian or Hindi — it is noise and can safely go.

Spaces That Are Not Spaces

Your spacebar produces U+0020, the ordinary space. Unicode defines more than a dozen other space characters that look like it but behave differently. The non-breaking space (U+00A0) prevents a line break — Word and many websites insert it between numbers and units, and web pages use it to keep "10 km" together. The narrow no-break space (U+202F) is its slimmer cousin and has become famous because several generations of AI chat models emit it where an ordinary space belongs, a quirk documented across 2025 that still shows up in pasted chatbot output today. The figure space (U+2007) matches the width of a digit, the word joiner (U+2060) glues words together invisibly, and the ideographic space (U+3000) is a full-width space used in CJK typography.

Why care? Non-breaking spaces are the number-one cause of "the values look the same but the formula says FALSE" mysteries in spreadsheets. They defeat trim() functions in some languages, confuse search engines indexing your content, and break command-line arguments copied from documentation. GhostGlyph's cleaner converts all of these impostor spaces back into ordinary spaces, so the text behaves exactly the way it looks.

The Soft Hyphen and the Byte-Order Mark

Two more characters deserve special attention because they are invisible in some contexts and visible in others. The soft hyphen (U+00AD) is a hint to the typesetter: break the word here if you must hyphenate at line end. In HTML it is invisible until a line break lands exactly on it, at which point a hyphen appears from nowhere. Copy a paragraph from a professionally typeset PDF and you may inherit dozens of them, silently changing word tokens for search and text processing.

The byte-order mark (U+FEFF) is a legacy of the UTF-16 era: a signature placed at the very start of a file to declare its encoding. Some Windows editors still prepend it to UTF-8 files, and web servers serve it along with the page. It renders as nothing, but it shifts string offsets, breaks JSON parsers that do not expect it, and shows up as a mystery character in concatenated files. GhostGlyph detects and strips it wherever it appears.

Bidirectional Overrides: When Text Lies About Its Order

Unicode supports mixed left-to-right and right-to-left text through explicit direction controls: U+202A through U+202E (embedding and override marks) plus the newer isolate marks U+2066 through U+2069. Normally these are balanced and harmless. Unbalanced, they become the "Trojan Source" attack demonstrated by security researchers in 2021: a right-to-left override (U+202E) can make source code display as harmless while the underlying bytes do something else, which is why compilers like Rust now warn about them.

You do not need to be a programmer to care. A bidi override pasted into a chat message or document can visually reorder a URL, a bank account number or an instruction so that what you read is not what you copy. GhostGlyph treats every unmatched direction control as a critical finding and removes them during cleaning — the single most impactful hygiene step this tool performs.

Homoglyphs: Letters That Wear a Disguise

A homoglyph is a character from one script that is visually indistinguishable from a character in another. Cyrillic "а" (U+0430) and Latin "a" (U+0061) look identical in almost every font; the same is true for Cyrillic "е"/Latin "e", "о"/"o", "р"/"p", "с"/"c", "х"/"x", and Greek "ο"/Latin "o" or "ρ"/Latin "p". Whole alphabets overlap: Cyrillic capital "АВЕКМНОРСТХ" maps one-to-one onto Latin "ABEK MHOPCTX" visually, and fullwidth "a" (U+FF41) mimics Latin "a" at double width.

This is the engine of homograph phishing: "apple.com" with a Cyrillic "а" resolves to a different domain than the real Apple. But the danger is not only phishing. A homoglyph in a username, a brand name or a code identifier breaks logins, searches and builds in ways that are maddening to debug because the text looks correct. GhostGlyph's homoglyph scanner shows a side-by-side comparison — the suspicious character next to its Latin look-alike, both labeled with code points — so you can judge instantly, and the cleaner can normalize them back to plain ASCII as an explicit opt-in.

The AI Copy-Paste Problem: Em Dashes, Smart Quotes and Ghost Spaces

Text copied out of AI chatbots, Word and PDFs arrives with typographic passengers. Em dashes (U+2014) where a human would type a hyphen, curly "smart" quotes (U+201C, U+201D, U+2018, U+2019) where a human would type straight ones, ellipses (U+2026) instead of three dots, and narrow no-break spaces where ordinary spaces belong. None of these are malicious, but they are the fingerprints of machine-generated or machine-typeset text — and they cause real friction: smart quotes break code and SQL, em dashes confuse CSV column widths, and ghost spaces break plagiarism checkers, CMS slugs and search.

GhostGlyph's AI-text scan mode flags exactly this family of characters. It does not claim to detect AI authorship — invisible characters are neither proof of AI writing nor proof of human writing — but it reliably finds the formatting residue that copy-paste leaves behind. The cleaner's "normalize AI punctuation" option converts smart quotes to straight quotes, em dashes to spaced hyphens and ellipses to three dots, producing plain, portable ASCII-friendly text.

How GhostGlyph Works: Scan, Annotate, Clean

Using the tool takes seconds. Paste your text into the left bench and press Scan. The engine walks the string code point by code point — using proper Unicode-aware iteration, so emoji and other characters outside the basic multilingual plane are never split — and matches each code point against a curated table of invisible, direction-control, suspicious-space and homoglyph characters. Findings appear in the annotated output on the right: flagged glyphs are highlighted in place with a small U+XXXX label, and hovering any flag reveals the character's official Unicode name and category.

The detection summary strip counts findings per category, and the character-map overlay toggle goes one step further, labeling every character in the text with its code point — a full X-ray view that is genuinely rare among free web tools. When you are ready, Clean text removes or normalizes each category you have ticked, then lets you copy the result, copy a per-category count summary, or download the cleaned text as a .txt file. Recent scan summaries are kept in your browser's local storage so you can compare runs; nothing is ever uploaded because there is no server — the entire analysis happens in JavaScript on your device.

Practical Workflows: Who Needs This and When

Writers and editors use invisible-character detection before publishing: paste a draft, strip the ghost spaces and smart quotes, and the CMS, the newsletter tool and the ebook converter all behave. Developers paste suspicious strings — API keys, tokens, webhook URLs, SQL fragments — to find the zero-width space that is breaking authentication. Students and researchers clean citations copied from PDFs, where soft hyphens and ligature artifacts corrupt references. Localization teams verify that translated strings contain no bidi overrides or homoglyphs before shipping. And anyone who has ever stared at two "identical" strings that refuse to match finally has a one-click answer.

A final note on cleaning discipline: remove what you understand. Zero-width and direction-control characters are almost always safe to strip. Homoglyph replacement should stay opt-in when your text is legitimately multilingual — Cyrillic text is not an attack, it is a language. That is why GhostGlyph makes homoglyph cleaning a separate checkbox rather than a silent default: the tool shows you everything, and you decide.

Frequently Asked Questions

A zero-width character is a Unicode code point that occupies no horizontal space when rendered, so it is completely invisible. The common ones are the zero-width space (U+200B), zero-width non-joiner (U+200C) and zero-width joiner (U+200D). They are legitimate in some scripts — ZWJ and ZWNJ control ligatures in Arabic, Persian and Indic languages, and ZWJ glues together compound emoji. Problems arise when they appear unintentionally, for example in text copied from chatbots or websites, where they break string comparisons, passwords, search and code without any visible clue. GhostGlyph highlights each one in place with its code point so you can see exactly what is hiding.
No — and you should be skeptical of any tool that claims otherwise. Invisible characters are formatting residue, not authorship evidence. They arrive from many ordinary sources: Word documents, PDF extraction, web pages, messaging apps and, yes, sometimes AI chat output (narrow no-break spaces and zero-width spaces have been documented in several chatbot generations). Their presence tells you the text passed through some software that inserted them; it says nothing reliable about who or what wrote the words. GhostGlyph's AI-text scan flags the character patterns commonly found in AI copy-paste — em dashes, smart quotes, ghost spaces — so you can clean the formatting, not to pass judgment on authorship.
A homoglyph attack substitutes letters from one script with visually identical letters from another — for example Cyrillic "а" (U+0430) for Latin "a" (U+0061) — so that "paypal.com" looks right while resolving to an attacker's domain. Spotting one by eye is essentially impossible, which is why you need code-point inspection. GhostGlyph scans for common Cyrillic, Greek and fullwidth confusables and shows a side-by-side comparison: the suspicious character next to its Latin look-alike, each labeled with its Unicode code point. If a "Latin" word contains code points from the Cyrillic block, you have found a disguise.
Almost always because of invisible characters. A non-breaking space (U+00A0) looks like a space but is a different code point, so spreadsheet lookups fail, trim() functions in some languages leave it behind, and command-line tools reject it. Smart quotes break SQL strings and JSON. A byte-order mark (U+FEFF) at the start of pasted content shifts offsets and confuses parsers. Soft hyphens from PDFs split words into unrecognized tokens. The fix is mechanical: detect the exact code points, normalize the spaces, strip the zero-width marks. Paste the offending text into GhostGlyph, scan it, and the culprit is usually highlighted within seconds.
For zero-width characters, direction controls and stray formatting marks, yes — they carry no meaning in ordinary prose and are safe to strip. Two categories deserve care. First, ZWJ and ZWNJ are meaningful in Arabic, Persian, Hindi and other scripts where they shape ligatures; stripping them there would alter the text, so review context first. Second, homoglyphs are only suspicious when a script you did not expect appears inside otherwise Latin text — genuine Cyrillic, Greek or fullwidth text is a language, not an attack. That is why GhostGlyph keeps homoglyph replacement as a separate opt-in checkbox instead of removing it silently. When in doubt, scan first, read the annotated output, then clean only the categories you understand.
No. GhostGlyph is a single self-contained web page with no backend, no analytics endpoint and no network calls for its analysis — all detection and cleaning runs in JavaScript inside your browser tab. The only thing stored is a small summary of your recent scans (character counts per category and timestamps), kept in your browser's own local storage so you can compare runs later. Your pasted text itself is never saved, never transmitted and never seen by anyone but you. You can verify this by disconnecting from the internet after the page loads: scanning and cleaning keep working offline.