TextWash

This page finds U+FE00–FE0F VARIATION SELECTORS, the invisible characters that switch emoji between text and emoji style. The sample below has two hearts that are not equal. Everything runs in your browser — nothing is uploaded.

Input

X-ray hover a highlight for details

Cleaned output copied ✓

Cleaning rules

What is U+FE0F (variation selector-16)?

An invisible character that asks the previous character to render in emoji style (full colour). Its sibling U+FE0E (VS15) forces plain text style. ❤ is U+2764; ❤️ is U+2764 + U+FE0F. Same symbol to your eye, different strings to every program.

Where it comes from

Emoji keyboards and pickers attach VS16 to older symbols (hearts, arrows, ✔, ☎, digits in keycap sequences). Copy an emoji from one app and type "the same" one in another, and one of them probably carries a selector the other doesn't.

What it breaks

Equality and deduplication: "❤" === "❤️" is false, so tag systems, reaction counters and database keys treat identical-looking emoji as different values. Length checks count it (.length 2, not 1), truncation can slice between base and selector, and search for ❤ misses ❤️. Hashtags and usernames that allow emoji inherit all of this.

Should you always remove it?

Honest caveat: stripping VS16 can change how the emoji renders — ❤️ may fall back to a plain dark ❤ in some contexts. For display text, that's usually acceptable; for storage keys and comparisons it's exactly what you want (or better, normalize on write). The x-ray above shows each selector (VS15/VS16) so you can decide; the "invisible characters" rule removes them.