Zerowidth CleanerAll measured guides

CLAUDE WATERMARK REMOVER · PRACTICAL TEST

Why can an HTML character reference survive cleaning?

The cleaner edits literal code points, so ASCII text such as ​ remains. In our narrow numeric-reference decoder, that spelling becomes U+200B only after decoding.

Tested October 5, 2026 · v24.19.0 · 3 measured runs

Open the Claude text cleaner · Full measured data

Code-point comparison for Literal HTML text

Measured inputs and outputs

These are locally constructed test strings, not evidence that Claude inserts these characters. We executed the saved homepage script snapshot with a minimal DOM harness and compared exact strings. Invisible removal is enabled; the dash mode appears in each row. The observations below test this page's specific question. We make no detector-score or statistical-watermark removal claim.

Before and after observations; full code points and strings are in the JSON download.
Fixture and modeInput string and code pointsOutput and cleaner statusObserved before / after
Literal HTML text
direct string / keep
"<p>A​B</p>"
U+003C U+0070 U+003E U+0041 U+200B U+0042 U+003C U+002F U+0070 U+003E
"<p>AB</p>"
Removed 1 invisible character
{"markupRetained":true,"decodedNumericOnly":"<p>A​B</p>"}
{"markupRetained":true,"decodedNumericOnly":"<p>AB</p>"}
Decimal reference
direct string / keep
"<p>A&#8203;B</p>"
U+003C U+0070 U+003E U+0041 U+0026 U+0023 U+0038 U+0032 U+0030 U+0033 U+003B U+0042 U+003C U+002F U+0070 U+003E
"<p>A&#8203;B</p>"
No selected invisible characters found
{"markupRetained":true,"decodedNumericOnly":"<p>A​B</p>"}
{"markupRetained":true,"decodedNumericOnly":"<p>A​B</p>"}
Hexadecimal reference
direct string / keep
"<p>A&#x200B;B</p>"
U+003C U+0070 U+003E U+0041 U+0026 U+0023 U+0078 U+0032 U+0030 U+0030 U+0042 U+003B U+0042 U+003C U+002F U+0070 U+003E
"<p>A&#x200B;B</p>"
No selected invisible characters found
{"markupRetained":true,"decodedNumericOnly":"<p>A​B</p>"}
{"markupRetained":true,"decodedNumericOnly":"<p>A​B</p>"}

What the text pass changes

The literal fixture loses U+200B while retaining the opening and closing p tags. The decimal and hexadecimal fixtures retain their complete ASCII source. Our small observer then converts only semicolon-terminated numeric references, exposing U+200B in both preserved encoded examples. That observer is a deliberately narrow test helper, not an HTML parser or sanitizer. The data records raw source and the helper result separately; the measured cleaner never invokes that decoder.

Source and rendered text need separate inspection

The HTML Standard defines character references as part of parsing. A rendered-text paste and a source-code paste can therefore reach a text tool in different representations. These Node fixtures do not measure a browser clipboard or a DOM tree; they demonstrate the representation boundary explicitly. They also show that markup survives our operation. Removing an invisible character is distinct from stripping elements, reviewing attributes or making untrusted HTML safe to render. No security claim follows from the removal count.

Choose the intended representation first

For an article paragraph, extract the intended text using the application HTML parser, inspect its code points and clean a working copy. For an HTML source file, preserve markup and edit identified text nodes through a reviewed workflow. Escaping after an edit is necessary when the destination expects source. Avoid global replacement of reference syntax, which can alter examples meant to teach HTML. This page tests only three synthetic p elements and numeric references; named entities, malformed references and script content remain untested.

Reproduce this test

Save reproduce.cjs and tested-app.js in the same folder. Run the command below with Node.js. The harness prints its runtime, script SHA-256 and every measured row. Compare those rows with the original record. Using a newer script or runtime creates a new experiment; retain the version information with your rerun.

node reproduce.cjs

Reference and next check

HTML character references provides the relevant primary definition. The table and fixture analysis are original measurements. For broader inspection, use our Unicode inspector. Read the scope distinction before interpreting cleanup as a watermark result.