You paste a paragraph from ChatGPT or Claude into WordPress and something is off. A search and replace that should work does nothing. An apostrophe looks fine on screen, then breaks the moment a script touches it. A sentence has a gap that isn’t really a space.

That’s the job an AI watermark remover is built for, though the name promises more than the tool delivers. The cause isn’t your editor. It’s the text itself. This guide covers which characters hide in AI output, what a cleaner removes, what it can’t touch, and how to check your own text by hand in about a minute.

Why text from ChatGPT and Claude breaks in WordPress

Language models don’t type the way a keyboard does. They write Unicode: curly quotes in place of straight ones, en dashes and em dashes in place of hyphens, non breaking spaces, and now and then a zero width character that takes up no room on screen at all. Some of that is style absorbed from well typeset books and articles. Some is formatting residue from the web pages and Markdown the model learned from.

A chat window renders all of it nicely, so you never notice. The trouble starts when the text leaves the chat.

Search and replace fails first. You type a straight apostrophe in the find box, but the document holds a curly one (U+2019). Zero matches, no error, no hint. A plain space against a non breaking one (U+00A0) does the same thing.

Code is next. Python refuses a pasted curly quote with a SyntaxError that names the character. JSON parsers reject it. A shell treats a pasted non breaking space as part of the command and reports “command not found” for something that looks perfectly normal. In WordPress, a shortcode attribute wrapped in curly quotes, like [button text=“Buy now”], won’t parse the way the straight quote version does.

Then there’s WordPress itself. Its wptexturize() function turns plain quotes, dashes and ellipses into typographic entities on output, and it skips code inside certain HTML blocks. The developer reference makes one thing clear: straight quotes in your stored content are safe, because WordPress curls them for display. Curly quotes in stored content are the ones that leak into code blocks, shortcodes and scripts. Plugin authors who deal with this see the same pattern. When curly quotes show up where nobody expected them, they are usually sitting in the original post content, as the wpuntexturize plugin notes.

Which invisible characters AI text actually contains

Not every odd character is a problem, and not every problem is invisible. Here are the ones that cause most of the damage.

Character Code point What it breaks
Curly apostrophe and single quotes U+2018, U+2019 Search, scripts, JSON strings
Curly double quotes U+201C, U+201D Shortcodes, code, JSON
En dash and em dash U+2013, U+2014 Slugs, find and replace, and readers who spot them as an AI habit
Non breaking space U+00A0 Search, shell commands, line wrapping
Zero width space U+200B Class names, URLs, strings. It survives Python’s strip()
Word joiner, byte order mark U+2060, U+FEFF Stray characters at the start of strings and files
Soft hyphen U+00AD Search matches that fail halfway through a word

Em dashes are fading, at least in one model line. BleepingComputer’s headline on the subject says Claude Opus 5.5 uses 95% fewer em dashes. That fixes one character on a longer list.

A few cleaners also scan for Unicode tag characters and long runs of variation selectors, because those can hide readable text inside ordinary text. If you ever feed untrusted pasted content into an AI agent or a publishing workflow, that matters more than curly quotes do. The Wikipedia entry on the zero width space is a decent primer on why a character with no width can still wreck a string comparison.

What does an AI watermark remover do?

An AI watermark remover scans pasted text and normalizes it. Curly quotes become straight quotes, dashes become hyphens or get rewritten as words, and non breaking spaces and zero width characters are deleted. The words stay the same. Only the invisible formatting underneath changes.

The good ones also show a report before they touch anything: how many of each character they found, and where. That report is the useful part. A tool that hands back clean text with no log leaves you guessing whether it did anything at all.

One caution on dashes. Swapping an em dash for a hyphen changes how a sentence reads, because a pause becomes a compound word. Rewriting with a comma or a full stop is the better fix, and it’s the one a human editor would make.

Does an AI watermark remover remove the real AI watermark?

No. And this is where the marketing runs ahead of the facts.

You’ll read claims that chat tools insert zero width characters as a deliberate marker. One invisible character cleanup site says there has been plenty of speculation about this but no strong evidence behind it, per its Invisible Character Remover page. What is documented is something different. Anthropic’s help page says models launched on or after August 2, 2026 weave an imperceptible watermark directly into the generated text, and that it travels with copy and paste and may survive some editing. Read the full wording on How Claude marks AI-generated content.

Woven into the text means it’s in the choice of words, not in extra characters. BleepingComputer’s investigation of watermark removers puts it plainly. Stripping hidden characters works and can be counted, but the watermark lives in which words the model picked, so the only known removal method is heavy rewriting with a second model. The same report says an independent tester found a popular text cleaner let a common hidden payload technique through untouched, and that the author of a leading open source tool admitted it removes metadata only for now. BleepingComputer also says it hasn’t audited any of these tools itself.

A few more facts help you set expectations.

Detection isn’t public. Anthropic says watermark detection is in private preview for eligible organizations such as regulators, researchers and media. So no remover can honestly claim it beats the detector.

A mark means processed, not written. The same page says a detected mark doesn’t prove Claude was the original author, since people use it to proofread, translate or summarize.

Marks fade. Heavy editing, paraphrasing, translation and very short passages can all leave too little signal.

The legal push comes from the EU. Article 50 of the AI Act sets transparency rules for AI generated content, and BleepingComputer reports fines reaching 15 million euros or 3% of global turnover. I’m not a lawyer, so check what applies to you.

So treat a character cleaner as a formatting tool. It fixes how text behaves. It doesn’t change where text came from, and it can’t promise any detector will see something different. If your publisher, school or client requires you to disclose AI use, cleaning the characters changes nothing about that duty.

Characters you shouldn’t strip

Here’s the mistake that costs people real content: running an aggressive cleaner over everything.

Some invisible characters have honest jobs. LLMPulse’s AI Watermark Remover documentation explains that joiners and non joiners are used in emoji families and in Arabic and Indic text, and that single variation selectors give you color emoji. Its tool reports these but leaves them alone unless you switch them on. That design is right. The zero width non joiner (U+200C) is part of normal Persian and Urdu spelling. Strip it from an Urdu paragraph and words quietly change shape. Strip the zero width joiner (U+200D) from a family emoji and it splits into separate faces.

For English body text, deleting all of them is fine. For multilingual sites, pick a cleaner that sorts characters into categories and lets you choose, or only clean the English paragraphs. A tool with one big “remove everything” button is wrong for that job.

How to check your own text by hand

You don’t need a website to find out what’s in a draft. Paste it into a file and run this:

text = open("draft.txt", encoding="utf-8").read()
print(sorted(hex(ord(c)) for c in set(text) if ord(c) > 127))

Every non ASCII character in the file shows up as a code point, including the invisible ones. In a plain English post, anything beyond U+2019, U+201C, U+201D and a few dashes deserves a look. On a non English post you’ll see a lot of expected noise, so scan for the specific suspects from the table above.

To clean the usual offenders:

swaps = {"\u2018": "'", "\u2019": "'", "\u201c": '"', "\u201d": '"', "\u00a0": " "}
for old, new in swaps.items():
    text = text.replace(old, new)
for ch in ("\u200b", "\u2060", "\ufeff", "\u00ad"):
    text = text.replace(ch, "")

If you work in VS Code, you already have a free check. The editor highlights invisible and ambiguous Unicode characters by default, so pasting a draft in often reveals them before you run anything.

How to clean AI text before publishing in WordPress

  1. Paste the draft into your cleaner and read the report first. If it found nothing, you’ve learned something too.
  2. Decide what to do with dashes. Rewrite with commas or full stops rather than letting a tool turn them into hyphens.
  3. Leave joiners and non joiners alone if any part of the post isn’t English.
  4. Paste the cleaned text into WordPress and view the post on mobile. Curly quotes in display text are fine. WordPress adds them itself.
  5. Check every shortcode, code block and embedded script by eye. These are the places where one wrong character costs you the afternoon.

What goes wrong most often is skipping step 5 because the text “looked fine.” It always looks fine. That’s the whole problem.

Is it okay to use an AI watermark remover?

For formatting, yes. Cleaning curly quotes and non breaking spaces out of your own drafts is the same housekeeping as running a spell check.

Two things deserve a second thought. First, privacy. If you’re pasting client drafts into a web tool, find out whether it processes text in your browser or sends it to a server. Second, trust. BleepingComputer’s warning about this category is worth taking seriously: many of the newer tools are unvetted code that people wire into agent pipelines and then feed documents through, which makes them a supply chain surface. Pick something open to inspection, or use the ten lines of Python above.

Using one to hide that a text came from an AI model is a different matter, and no character cleaner can do that reliably anyway.

Questions people ask

Will it change my wording?

No. A normalizer swaps characters and leaves words alone. If a tool rewrites sentences, it’s a paraphraser, and a paraphraser can shift meaning.

Does it make AI text undetectable?

No. Detectors of the ordinary kind look at style and statistics, and Anthropic’s own mark sits in word choice. Character cleaning leaves both untouched.

How often should I run it?

Once, right before publishing. Do it at the end so later edits don’t bring new characters in, then forget about it until the next post.

Leave a Reply

Your email address will not be published. Required fields are marked *