740

I've seen weirdly formatted text called Zalgo like below written on various forums. It's kind of annoying to look at, but it really bothers me because it undermines my notion of what a character is supposed to be. My understanding is that a character is supposed to move horizontally across a line and stay within a certain "container". Obviously the Zalgo text is moving vertically and doesn't seem to be restricted to any space.

Is this a bug/flaw/exploit/hack in Unicode? Are these individual characters with weird properties? "What" is happening here?


H̡̫̤̤̣͉̤ͭ̓̓̇͗̎̀ơ̯̗̱̘̮͒̄̀̈ͤ̀͡w͓̲͙͖̥͉̹͋ͬ̊ͦ̂̀̚ ͎͉͖̌ͯͅͅd̳̘̿̃̔̏ͣ͂̉̕ŏ̖̙͋ͤ̊͗̓͟͜e͈͕̯̮̙̣͓͌ͭ̍̐̃͒s͙͔̺͇̗̱̿̊̇͞ ̸̤͓̞̱̫ͩͩ͑̋̀ͮͥͦ̊Z̆̊͊҉҉̠̱̦̩͕ą̟̹͈̺̹̋̅ͯĺ̡̘̹̻̩̩͋͘g̪͚͗ͬ͒o̢̖͇̬͍͇͓̔͋͊̓ ̢͈͙͂ͣ̏̿͐͂ͯ͠t̛͓̖̻̲ͤ̈ͣ͝e͋̄ͬ̽͜҉͚̭͇ͅx͎̬̠͇̌ͤ̓̂̓͐͐́͋͡ț̗̹̝̄̌̀ͧͩ̕͢ ̮̗̩̳̱̾w͎̭̤͍͇̰̄͗ͭ̃͗ͮ̐o̢̯̻̰̼͕̾ͣͬ̽̔̍͟ͅr̢̪͙͍̠̀ͅǩ̵̶̗̮̮ͪ́?̙͉̥̬͙̟̮͕ͤ̌͗ͩ̕͡


4

2 Answers 2

454

The text uses combining characters, also known as combining marks. See section 2.11 of Combining Characters in the Unicode Standard (PDF).

In Unicode, character rendering does not use a simple character cell model where each glyph fits into a box with given height. Combining marks may be rendered above, below, or inside a base character

So you can easily construct a character sequence, consisting of a base character and “combining above” marks, of any length, to reach any desired visual height, assuming that the rendering software conforms to the Unicode rendering model. Such a sequence has no meaning of course, and even a monkey could produce it (e.g., given a keyboard with suitable driver).

And you can mix “combining above” and “combining below” marks.

The sample text in the question starts with:

Sign up to request clarification or add additional context in comments.

4 Comments

Unicode can do this because it deliberatedly conforms to nothing but the "real world usage of characters" - software is then expected to conform to Unicode. And this is why we have e.g., U+1F4A9.
Just to add to this, here's a list of combining characters used above below, or through the text to generate "Zalgo text": zalgotextgenerator.com/unicode
@CamiloMartin I don't think I understand what you mean by "real world usage". Is there a language, for example, in which an H decorated with a small T, koronis, comma above and dot above, represents a meaningful textual concept, beyond "this is an H but there's a bunch of arbitrarily chosen stuff obscuring it"? If any of those decorations were removed or altered, would the semantics actually change?
@KarlKnechtel I can think of one example: In mathematical notation, weird symbols a above another symbol mean some type of modification (derivation, complement, adjoint, transposed, fourier-transform), was applied to it. Multiple different or a single repeated modification can be written with multiple symbols. Of course, nobody would stack this notation 20 times. But on the other hand, it would be weird for Unicode to place an upper bound on how far you can take this.
296

Zalgo text works because of combining characters. These are special characters that allow to modify character that comes before.

enter image description here

OR

y + ̆ = y̆ which actually is

y + ̆ = y̆

Since you can stack them one atop the other you can produce the following:


y̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆

which actually is:

y̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆

The same goes for putting stuff underneath:


y̰̰̰̰̰̰̰̰̰̰̰̰̰̰̰̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆



that in fact is:

y̰̰̰̰̰̰̰̰̰̰̰̰̰̰̰̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆

In Unicode, the main block of combining diacritics for European languages and the International Phonetic Alphabet is U+0300–U+036F.

More about it here

To produce a list of combining diacritical marks you can use the following script (since links keep on dying)

for(var i=768; i<879; i++){console.log(new DOMParser().parseFromString("&#"+i+";", "text/html").documentElement.textContent +"  "+"&#"+i+";");}

Also check em out



Mͣͭͣ̾ Vͣͥͭ͛ͤͮͥͨͥͧ̾

14 Comments

how would you type that?
@Aequitas If you are asking about ALT codes then you cannot do that you would simply paste y&#x0306;&#x0306; where it gets into 'pure' html and browser would do it's magic...
@barbsan Hi, thanks for letting me know, I have replaced it with a script that generates them.
@SergeyA I think he uses this example because it is the very same example the linked wikipedia page (en.wikipedia.org/wiki/Combining_character) is using.
@MatasVaitkevicius it's hard to explain to someone who is not native Russian without violating SO's rule for profanity and obscenity. Basically, there is a (most) obscene word in Russian which is 3 characters. If they were all to be drawn one over another you'd come up with a glyph which would very much resemble the one posted. Any native Russian speaker will immediately recognize this writing as obfuscated obscene word (in funny way, not insulting one). I think, this particular glyph was invented by Russian designer some decades back.
|

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.