Wie funktioniert Zalgo-Text?

694

Ich habe seltsam formatierten Text namens Zalgo gesehen, wie unten in verschiedenen Foren geschrieben. Es ist irgendwie nervig anzusehen, aber es stört mich wirklich, weil es meine Vorstellung davon untergräbt, was ein Charakter sein soll. Mein Verständnis ist, dass sich ein Charakter horizontal über eine Linie bewegen und in einem bestimmten "Container" bleiben soll. Offensichtlich bewegt sich der Zalgo-Text vertikal und scheint nicht auf Leerzeichen beschränkt zu sein.

Ist das ein Bug / Fehler / Exploit / Hack in Unicode? Sind diese einzelnen Charaktere mit seltsamen Eigenschaften? "Was passiert hier?


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


Mike
quelle
31
en.wikipedia.org/wiki/Combining_character bietet möglicherweise einige Hinweise.
Lucas Jones
2
Dies könnte Sie auch umhauen: en.wikipedia.org/wiki/…
Burhan Ali
3
Als obligatorische Referenz xkcd.com/1857
mackycheese21

Antworten:

431

Der Text verwendet Kombinationszeichen, auch Kombinationszeichen genannt. Siehe Abschnitt 2.11 unter Kombinieren von Zeichen im Unicode-Standard (PDF).

In Unicode wird beim Rendern von Zeichen kein einfaches Zeichenzellenmodell verwendet, bei dem jedes Symbol in ein Feld mit einer bestimmten Höhe passt. Kombinationsmarkierungen können über, unter oder innerhalb eines Basiszeichens gerendert werden

So können Sie auf einfache Weise eine Zeichenfolge erstellen, die aus einem Basiszeichen und "Kombinieren über" -Markierungen beliebiger Länge besteht, um eine beliebige visuelle Höhe zu erreichen, vorausgesetzt, die Rendering-Software entspricht dem Unicode-Rendering-Modell. Eine solche Sequenz hat natürlich keine Bedeutung, und selbst ein Affe könnte sie produzieren (z. B. bei einer Tastatur mit geeignetem Treiber).

Und Sie können die Markierungen "Kombinieren oben" und "Kombinieren unten" mischen.

Der Beispieltext in der Frage beginnt mit:

Jukka K. Korpela
quelle
36
Unicode kann dies tun, weil es absichtlich nur der "realen Verwendung von Zeichen" entspricht - von Software wird dann erwartet, dass sie Unicode entspricht. Und deshalb haben wir zB U+1F4A9.
Camilo Martin
2
Um dies zu ergänzen, hier eine Liste der oben verwendeten kombinierten Zeichen oder durch den Text, um "Zalgo-Text" zu generieren: zalgotextgenerator.com/unicode
VKK
270

Zalgo-Text funktioniert aufgrund der Kombination von Zeichen. Dies sind Sonderzeichen, mit denen Sie vorhergehende Zeichen ändern können.

Geben Sie hier die Bildbeschreibung ein

ODER

y + ̆ = y̆ was eigentlich ist

y + ̆ = y̆

Da Sie sie übereinander stapeln können, können Sie Folgendes erzeugen:


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

was eigentlich ist:

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

Das gleiche gilt für das Unterlegen von Sachen:


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



das ist in der Tat:

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

In Unicode ist der Hauptblock für die Kombination von Diakritika für europäische Sprachen und das internationale phonetische Alphabet U + 0300 - U + 036F.

Mehr dazu hier

Um eine Liste mit kombinierten diakritischen Zeichen zu erstellen, können Sie das folgende Skript verwenden (da Links immer wieder sterben).

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

Überprüfen Sie sie auch aus



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

Matas Vaitkevicius
quelle
2
Wie würden Sie das eingeben?
Aequitas
6
@Aequitas Wenn Sie nach ALTCodes fragen , dann können Sie das nicht tun. Sie würden einfach einfügen, y&#x0306;&#x0306;wo es in "reines" HTML gelangt , und der Browser würde es zaubern ...
Matas Vaitkevicius
2
@barbsan Hallo, danke, dass du mich informiert hast. Ich habe es durch ein Skript ersetzt, das sie generiert.
Matas Vaitkevicius
Ich frage mich, warum Sie dieses besondere Beispiel von Y mit einem Tildae gewählt haben. Es hat tatsächlich eine Bedeutung auf Russisch, nicht sicher, ob Sie damit vertraut sind.
SergeyA
@SergeyA Ich denke, er verwendet dieses Beispiel, weil es das gleiche Beispiel ist, das die verlinkte Wikipedia-Seite ( en.wikipedia.org/wiki/Combining_character ) verwendet.
Mischa