Skip to main content

Guides

Hidden Characters and Screen Reader Accessibility

CleanPastedText editorial · Updated

Text workbench

Try it on your text

Cleaning mode

Removes hidden characters and standardizes AI-style punctuation.

Try a real example

Each sample contains a problem you cannot see.

Original

Pasted text

0 chars · 0 words

Cleaned

Ready to copy

0 changes

Text stays in this browser

Same words · No AI rewriting · No content logging

An accessibility bug hiding inside an AI-watermark story

Most of this site talks about hidden Unicode characters as an AI-watermark or copy-paste problem. They're also, independently, a documented web accessibility problem — one the W3C wrote failure techniques for years before "AI watermark" was a phrase anyone used. Assistive technology (screen readers, braille displays, some text-to-speech engines) reads the actual character sequence in your text, not the rendered pixels. A character that is invisible to your eyes is not invisible to that pipeline.

That gap is exactly what WCAG Technique F32 and F33 describe: both are filed as documented ways to fail WCAG Success Criterion 1.3.2, Meaningful Sequence, by using whitespace characters — the same family of characters this tool detects — to fake a visual effect instead of using real markup for it.

What F32 and F33 are actually about

F32

Spacing characters inside a word

Inserting space-like characters between individual letters to fake letter-spacing (a common pattern in text copied from stylized web pages or PDFs). Assistive technology can read the result as separate, unrelated words instead of one word.

F33

Repeated spacing to fake layout

Using strings of whitespace characters to simulate indentation, columns, or tables instead of real formatting. Screen readers can collapse, skip, or misannounce the layout it was meant to create.

Both techniques predate today's AI chat interfaces by over a decade — WCAG 2.0 was published in 2008 — which is worth sitting with. The characters that make ChatGPT or Claude output paste strangely into a CMS are the same category of character the accessibility community had already flagged as a screen-reader hazard, long before anyone was talking about AI watermarking. Fixing it for one audience fixes it for the other.

Which specific characters carry accessibility risk

CharacterWhy it matters for assistive tech
U+200B Zero Width SpaceCan sit mid-word, splitting one word into fragments for a screen reader to parse separately.
U+00A0 / U+202F No-Break SpacesLook like a normal space but are a distinct character, which can change how a text-to-speech engine phrases pauses in a sentence.
U+200E / U+200F Directional MarksCan cause reading order to diverge from visual order — see the BiDi character guide for how this class of character behaves.
U+2060 Word JoinerZero-width by design, so it carries the same mid-word fragmentation risk as U+200B.

The full reference table of every character this tool detects — including the ones that are purely cosmetic rather than accessibility-relevant — is in the invisible Unicode characters list.

Checking text before it reaches a screen reader

  1. Paste the text — a CMS draft, an email, a document — into the cleaner at the top of this page.
  2. Read the "What changed" report. It names every hidden character by its actual code point, so you can tell whether an accessibility-relevant one (a zero-width space, a BiDi mark) was present, rather than guessing.
  3. Publish the cleaned version. The visible words are unchanged; only the characters an assistive technology would have parsed differently are gone.

This step is one part of publishing accessible content, not the whole of it — see how to clean AI-generated text before publishing for the rest of that checklist.

Sources

Common questions

Frequently asked questions

Do invisible Unicode characters actually break screen readers?

They can. The W3C's WCAG 2 documents two named failure techniques for it: F32 covers using whitespace characters to fake letter-spacing inside a word, and F33 covers using repeated whitespace characters to fake visual layout such as indentation or columns. Both are filed under Success Criterion 1.3.2 (Meaningful Sequence) because assistive technology reads the underlying character sequence, not the visual result — so a screen reader or braille display can announce a word letter-by-letter, insert unwanted pauses, or misjudge word boundaries entirely.

What does WCAG actually say about this?

WCAG Success Criterion 1.3.2 requires that the reading and navigation order of content — what a screen reader or other assistive technology encounters as it moves through the text — stays meaningful and correct. The W3C's Techniques for WCAG 2.0 lists F32 and F33 as documented ways to fail that criterion specifically by misusing whitespace characters for visual effect instead of using real formatting.

Which characters this tool removes are the accessibility-relevant ones?

Zero-width space (U+200B) and word joiner (U+2060) can sit inside a word and split it into fragments for assistive technology. Non-breaking space (U+00A0) and the narrow no-break space (U+202F) are visually indistinguishable from a normal space but are a different character underneath, which can affect how text-to-speech engines phrase a sentence. Bidirectional control marks (covered in depth on the BiDi character guide) can cause a screen reader to announce text in a different order than it visually appears.

Does removing hidden characters make a page accessible on its own?

No — it removes one specific, documented source of failures under Success Criterion 1.3.2. Overall accessibility also depends on things a text cleaner can't touch, like heading structure, alt text, color contrast, and keyboard operability. Cleaning hidden characters out of pasted content is a narrow, useful step, not a substitute for a full accessibility review.

Is the CleanPastedText tool itself accessible?

It's built to WCAG's core operable-and-perceivable expectations: every control is reachable and operable by keyboard, results are announced to screen readers through a live region as they update, and interactive elements carry visible focus states and accessible names. Like any site, it benefits from ongoing testing with real assistive technology rather than a one-time claim.

Continue reading

Related guides & tools

Remove Invisible Characters from Text

Instantly remove invisible characters, zero-width spaces, and hidden Unicode from any text — including ChatGPT output. Free, private, runs in your browser.

Invisible Unicode Characters: The Complete List

The complete table of invisible Unicode characters: zero-width spaces, U+202F, BiDi controls, tag characters, variation selectors — and why each one matters.

Zero Width Space Remover (U+200B)

Stop weird spacing and broken search results. Instantly identify and delete hidden zero-width spaces (U+200B) from your text for a clean paste.

Remove & Convert Non-Breaking Spaces (NBSP)

Convert non-breaking spaces (NBSP, U+00A0) into standard spaces. Fix text that won't wrap and remove un-deletable gaps from pasted content — free, in-browser.

Remove BiDi & Directional Control Characters

Strip hidden U+200E, U+200F and other directional control characters that flip your text or cause cursor glitches. Sanitize text for code and documents.

How to Sanitize Copied Text for Code, JSON & CSV

Sanitize copied text for code, JSON, CSV, forms, or databases. Remove invisible Unicode and normalize risky characters locally, with a full report.

Why Does My Text Paste Weird?

An in-depth guide to Unicode, invisible characters, and why copying from PDFs, websites, and AI chatbots causes weird spacing and formatting issues.

How CleanPastedText Works

The exact pipeline CleanPastedText runs: detection-first scanning, emoji-safe stripping, NFKC normalization. Deterministic, client-side, nothing uploaded.