Text Cleaner

Seven cleanup passes over one paste — extra spaces, punctuation, special characters, numbers, emoji, HTML tags and accents — each on its own switch, all of them on to start.

Runs 100% in your browserNothing is uploaded to a serverInstant results

What to remove

Fine tuning

Input

Result

Copied!

Before and after

0
Characters in
0
Characters out
0
Characters removed
0
Words in → out

One paste, seven passes

Text that has been somewhere else always arrives carrying the shape of where it came from. A paragraph copied out of a web page brings non-breaking spaces and the indentation of the HTML source. An export from a CMS brings the tags themselves. A chat log brings emoji, a PDF brings its line numbering, a European name list brings accents a legacy field cannot store. Cleaning any one of those is a two-second job. Cleaning all six at once, by hand, in the right order, is not — which is what this page is for.

Every switch starts on. Paste something and the default pass strips the markup, drops the emoji, folds the accents, removes the whole numbers, cuts the punctuation back to sentence endings and apostrophes, removes the symbols outside basic punctuation, and evens out the whitespace. That is a deliberately aggressive default, and it is meant to be edited: the switches are the first thing on the page precisely because the right answer depends on what you are cleaning. Untick Numbers if the dates matter. Untick Punctuation if a human has to read the result.

The order the passes run in is fixed and is not the order of the checkboxes: HTML tags, emoji, accents, numbers, punctuation, special characters, extra spaces. That sequence is doing real work. Markup has to go before punctuation, or <p> loses its angle brackets and leaves a stray p in the middle of the sentence. Accents have to be folded before any ASCII-only pass, or every accented letter is deleted rather than simplified. Whitespace has to be last, because every earlier step leaves gaps where the characters it removed used to be.

The counters underneath show the character count in, the character count out, how many characters went, and the word count either side. Everything runs in your browser: nothing you paste is uploaded, which is the point when the thing you are cleaning is a contract, a transcript, a customer email or an export you are not allowed to put through a web service.

Each pass, on its own page

Every switch above is the same code as the page below it, with more room for the settings that only matter for that one transform — and with the specifics of when it goes wrong.

Text cleaner questions

In what order do the cleaners run?

Always the same order, and it is not the order of the checkboxes: HTML tags, emoji, accents, numbers, punctuation, special characters, then extra spaces. The order changes the answer. Markup has to go before punctuation, or a stripped tag leaves a bare p behind for the punctuation pass to keep. Accents have to be folded before an ASCII-only pass, or the accented letters are simply deleted. And the whitespace tidy-up runs last so it can close up the gaps every earlier step opened.

Why did my dates and prices disappear?

Because the numbers switch is on. Every switch on this page starts on, which is what makes it a one-click cleaner, but that also means it is a destructive default. Untick Numbers and the digits come back. The numbers setting starts on “whole numbers only”, so a digit welded into a word such as mp3 or H2O survives either way — it is the standalone years, quantities and invoice numbers that go.

Is any of this uploaded?

No. Every transform on this page is plain JavaScript running in your own browser, and the page makes no network request of any kind with what you paste. That matters here more than on most tools, because the text people clean is usually the text they cannot send anywhere: a contract, a transcript, a customer message or an export from an internal system.