Which character HTML accepts
HTML accepts U+00A0. The CSS white-space processing model collapses exactly five characters: U+0020, tab, line feed, carriage return and form feed. U+00A0 is not one of them.
The fallback is U+200B, which clears validators the first character does not. Both survive trim(), which is the operation that destroys an ordinary space.
How to set it on HTML
To set blank text on HTML, copy the character above and paste it into a cleared field. The whole method is one paste — the cost is free.
- Copy U+00A0 from the tool above, or write the entity .
- Paste it where the space must persist.
- Verify in the rendered output rather than the source.
Why an invisible character works where a space does not
One Unicode property decides it, and it is not the one most guides name. Every character carries a White_Space value of Yes or No, and that value determines whether trim() removes it.
The spacebar produces U+0020, whose White_Space value is Yes. HTMLtrims the field before saving, the trimmed value is empty, and the field falls back to its previous contents. That is why a name built from spaces looks correct in the editor and reverts the moment you save.
U+00A0 has White_Space=No. No trimming function removes it and the regex class \s does not match it, so the value that reaches the server is the value you pasted.
One caveat applies to U+3164 specifically. Normalization Form NFKC folds it to U+1160 Hangul Jungseong Filler, so a platform that normalizes before storing keeps a different codepoint than the one you pasted. The name still displays blank. Use U+1160 directly if you want the stored value to match exactly.
What it costs on HTML
Free. Nothing is consumed by a failed attempt, so trying a second character costs only the time.
If it does not work on HTML
If spacing still collapses, the container has white-space: normal and the character was an ordinary space rather than U+00A0.
The field clears itself after saving
HTML trimmed the value and found an empty string, so it restored the previous one. The character you used has White_Space=Yes. Switch to U+00A0 or U+200B, which do not, and the value survives the trim.
A box or question mark appears
The rendering font has no glyph at that codepoint, so the renderer draws.notdef — an empty rectangle in most fonts. The stored value is correct and only the display is wrong. U+200B carries wider font coverage than most alternatives.
The paste produces nothing on mobile
The keyboard or clipboard manager sanitised the content in transit. Paste into a plain-text notes app first, copy from there, then paste into HTML. This is the single most common practical failure and it has nothing to do with the character itself.
It works on desktop and fails in the app
The two clients validate separately. A value the desktop site accepts can still be rejected by the mobile client's own check, and the reverse also happens. Set it on whichever client accepts it — the stored value is shared.
Full property data for both characters is on the Unicode invisible characters table.
Is a blank name allowed on HTML?
Yes. A blank name breaks no HTML rule. Platform policies restrict impersonation, harassment and filter evasion, not which codepoints a name contains.
Two uses do violate policy on HTML and on every comparable platform, and neither depends on the name being blank. Copying another user's name to pass as them is impersonation. Splitting a blocked word with a zero-width character to defeat moderation is evasion.
One consideration applies regardless of the rules. Screen readers announce nothing for an invisible character, so NVDA, JAWS and VoiceOver read a fully blank name as unnamed. Keeping one visible character alongside the invisible ones preserves the announcement and still looks almost blank.