Strikethrough Text Generator

Strikethrough built from combining marks rather than formatting, so the line survives into fields that strip rich text entirely.

Combining marks, not a formatting attribute

In a word processor, strikethrough is an attribute. The letters are untouched and the application separately records "draw a line through this run", which is why the line vanishes the moment you paste into a field that accepts only plain text. This strikethrough text generator works the other way round. It walks your input character by character and appends a combining mark after each one: U+0336 COMBINING LONG STROKE OVERLAY for the standard strike, U+0335 stacked on top of it for the double, U+0332 COMBINING LOW LINE for the underline. A combining mark has zero advance width of its own. The shaping engine draws it across or beneath the base character immediately before it, and the pair behaves as a single grapheme cluster, so one press of backspace removes both. Because the line is now made of characters rather than a formatting flag, it travels wherever the string travels: a bio field, a spreadsheet cell, an SMS, a game nickname box. Nothing strips it out, because there is no formatting present to strip.

Where these marks came from

Combining marks are not a typographic trick someone bolted on; they are how Unicode encodes accents. The Combining Diacritical Marks block, U+0300 to U+036F, was defined so that any base letter could carry any mark without the standard needing a separate code point for every pairing. The letter e acute exists precomposed as U+00E9 for round-tripping with older encodings, but it also exists, equivalently, as e followed by U+0301. Each mark carries a canonical combining class that tells the renderer where to place it: U+0335 and U+0336 are class 1, the overlay class, so they sit across the middle of the glyph at roughly x-height, while U+0332 is class 220 and attaches below the baseline. The overlay strokes were included for scholarly and linguistic notation, including abbreviation strokes from medieval manuscripts and barred letters in phonetic transcription. Marking deleted text was never their purpose. Using them for strikethrough is a repurposing the standard permits but never planned for, and that mismatch is the root of most of the rendering trouble described below.

What the thirty styles actually cover

The thirty styles on this page are not thirty different lines. They are the small set of overlay and below-line marks Unicode genuinely defines, crossed with the base alphabets FancyTextAgent ships. The distinct marks are few: U+0336 long stroke overlay, the default strike; U+0336 plus U+0335 stacked, giving a heavier double; U+0332 low line for a single underline and U+0333 for a double; U+0324 combining diaeresis below, which reads as a dotted underline; U+0330 combining tilde below for a wavy rule; and U+0337 short solidus overlay for a diagonal slash. That is the entire vocabulary the standard offers. There is no thickness control, no colour, no dashed or dotted overlay variant, and no control over where the line starts or stops inside a word, because the effect is applied per character. Spaces are deliberately left unmarked: a struck space renders in many fonts as a floating dash hanging between words, which reads as a typo rather than a rule, so each word carries its own line and the gaps stay clean.

Where it renders cleanly and where it breaks

Rendering quality is decided by the font and the shaping engine, not by your text. When a font contains a real glyph for U+0336 and the mark-attachment data to go with it, HarfBuzz, CoreText or DirectWrite positions the stroke against the outline of the base glyph and the result is clean. When it does not, the engine substitutes a fallback, draws a dotted circle or an empty box, or places the stroke at a default offset that ignores the letter underneath. The failure is most obvious on wide characters. CJK ideographs, full-width Latin and most emoji occupy roughly two ems, while overlay marks are drawn at a width suited to lowercase Latin, so the stroke covers the left half of a kanji and simply stops. Below-line marks vary too: descenders push U+0332 down by different amounts in different fonts, so an underline that sits flush in your browser can cut into the tail of a g elsewhere. Paste a sample into the real destination and look at it before committing.

When to use this instead of native formatting

Reach for combining strikethrough only where the destination has no formatting of its own. Discord and Reddit both take ~~text~~, Slack and WhatsApp take ~text~, and where that native syntax exists it is the better choice: it is one attribute, it costs no extra characters, and assistive technology can be told what it means. The combining version earns its place in fields that accept nothing but a raw string. That includes an Instagram or Facebook bio, a YouTube channel description, an X display name, a game nickname or clan tag, a spreadsheet cell, a plain-text form field, a filename. The common purpose is contrast rather than decoration: an old price beside a new one, a cancelled commitment beside its replacement, a word struck for comic effect so the reader sees both what you wrote and what you meant. The underline variants are used differently again, standing in for a heading or a signature line inside a field that offers no styling at all, where bold and italic are not available either.

The two costs worth naming

Two costs deserve to be stated plainly. The first is accessibility. Struck text in HTML uses the del or s element, which carries meaning a screen reader can announce; a combining stroke carries none. Screen readers handle the marks inconsistently, and depending on the software and its verbosity settings a listener gets either a stream of character descriptions read out one mark at a time, or the base letters read in a level voice as though nothing were struck at all. Either way the cancellation you intended is lost. If the strike carries meaning rather than decoration, write that meaning in words as well. The second cost is matching. Search boxes, hashtags, mentions, autocomplete and your browser's find-in-page all compare the characters they are handed. Once the word sale is s, U+0336, a, U+0336, l, U+0336, e, U+0336, it no longer equals the word sale, so a struck phrase in a bio, a title or a listing is invisible to anyone searching for it. Never strike a keyword you want found.

How it collides with character limits

The arithmetic matters because the mark is a character. Every non-space letter costs two code points instead of one, so a 48-character sentence containing eight spaces arrives at its destination as 88; double strikethrough stacks two marks and costs three per letter, taking the same sentence to 128. Normalisation does not rescue you, because there is no precomposed struck letter for the pair to collapse into, so base plus mark stays two code points through NFC. Platforms count exactly what they receive, not what you see. Facebook's bio field stops at 101 characters, which leaves room for roughly fifty struck letters, or one short phrase. Instagram allows 150 in a bio and 30 in a display name, X allows 160 in a bio and 280 in a post, and WhatsApp's About field caps at 139. This is why FancyTextAgent's Facebook page filters per-character styles out of its set: a decorative frame adds a fixed handful of characters regardless of length, whereas a stroke grows with every single letter you type.

What this tool will not do

This page adds marks; it does not remove them, and it cannot make an application honour them. To strip strikethrough from text you have been sent, normalise to NFKD, which splits precomposed characters into base plus marks, delete everything in the combining ranges U+0300 to U+036F, U+1AB0 to U+1AFF, U+20D0 to U+20F0 and U+FE20 to U+FE2F, then normalise back. FancyTextAgent's plain text converter does exactly that, with a toggle that spares the six ordinary accents. Narrow that character class if the text is multilingual, since the same pass strips tone marks from decomposed Vietnamese. The generator also produces no HTML, no markdown and no formatting attribute: copy a struck line into a document and you get struck-looking characters, not a run with strikethrough applied, so spellcheck, find and export treat those letters as unknown. And it cannot promise an appearance. The same string can look immaculate in one client and misaligned in the next, which is why every style here is worth testing in the place where it will actually be read.

Frequently asked questions

Why does my strikethrough show as boxes or empty squares?

The font in that application has no glyph for the combining mark, so the renderer falls back to a dotted circle or an empty box. Older Android builds, some game clients and embedded displays do this. The text is fine; pick another style, or test the destination first.

Does strikethrough text work in an Instagram bio?

Yes. The bio field accepts arbitrary Unicode and the strokes survive, because they are characters rather than formatting. Mind the 150-character cap: each struck letter counts twice, so roughly seventy letters fit. The username field is a different matter and rejects combining marks outright.

Why does struck text use twice as many characters?

Because the stroke is a character. Each non-space letter becomes two code points, the letter plus U+0336, so a 48-character sentence with eight spaces is transmitted as 88. Double strikethrough stacks two marks and costs three per letter. Platforms count what they receive, not what you see.

How do I remove strikethrough from Unicode text?

Normalise the string to NFKD, delete the combining ranges U+0300 to U+036F, U+1AB0 to U+1AFF, U+20D0 to U+20F0 and U+FE20 to U+FE2F, then normalise back. FancyTextAgent's plain text converter does this, with a toggle that keeps ordinary accents so cafe keeps its acute.

Can I put a strikethrough in my username or handle?

No. Instagram usernames, X handles and Facebook's name field validate against a Latin-only character set and refuse anything outside it, usually with an error rather than silent truncation. Strikethrough belongs in bios, captions, posts and display names on networks that allow Unicode there.

Why is the line broken between words instead of continuous?

Spaces are left unmarked on purpose. A struck space renders in many fonts as a dash floating in the gap, which reads as a mistake rather than a rule, so each word carries its own line. Replace spaces with underscores before styling if you want one stroke.

Is strikethrough text readable by screen readers?

Not reliably. There is no semantic equivalent of the del element in plain characters, so assistive software either reads mark descriptions aloud or reads the base letters as though nothing were struck, losing the cancellation entirely. Put anything the strike is meant to say into words too.

Why does the stroke sit off-centre on Japanese text or emoji?

Overlay marks are drawn at a width suited to lowercase Latin, while CJK ideographs, full-width Latin and emoji occupy about two ems. The stroke therefore covers the left portion of the glyph and stops short. A few fonts scale the mark; most do not. Test first.