Як працює текст Zalgo?


694

Я бачив дивно відформатований текст під назвою Zalgo, як написано нижче, написаний на різних форумах. Це дивно дивитися, але це насправді турбує мене, оскільки це підриває моє уявлення про те, яким повинен бути персонаж. Я розумію, що персонаж повинен рухатися горизонтально через лінію і залишатися в певному "контейнері". Очевидно, що текст Zalgo рухається вертикально і, здається, не обмежений жодним простором.

Це помилка / недолік / експлуатування / злом в Unicode? Це окремі персонажі з дивними властивостями? "Що" тут відбувається?


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



31
en.wikipedia.org/wiki/Combining_character може запропонувати деякі підказки.
Лукас Джонс

2
Це також може підірвати ваш розум: en.wikipedia.org/wiki/…
Бурхан Алі

3
Як обов’язкове посилання, xkcd.com/1857
mackycheese21

Відповіді:


431

У тексті використовуються поєднання символів, також відомі як об'єднання знаків. Дивіться розділ 2.11 Комбінування символів у стандарті Unicode (PDF).

У Unicode для відображення символів не використовується проста модель символьної комірки, де кожен гліф вміщується у вікно із заданою висотою. Комбінуючі позначки можуть бути зображені вище, нижче або всередині основного символу

Таким чином, ви можете легко побудувати послідовність символів, що складається з базового символу та знаків «комбінування вище» будь-якої довжини, щоб досягти будь-якої бажаної візуальної висоти, якщо припустити, що програмне забезпечення для відображення відповідає моделі Unicode візуалізації. Така послідовність, звичайно, не має ніякого значення, і навіть мавпа могла б її виготовити (наприклад, давши клавіатуру з відповідним драйвером).

І ви можете змішати позначення "комбінування вище" та "комбінування внизу".

Зразок тексту запитання починається з:


36
Unicode може це зробити, оскільки свідомо не відповідає нічого, окрім "реального використання символів" - програмне забезпечення, як очікується, відповідає Unicode. І саме тому у нас є , наприклад, U+1F4A9.
Каміло Мартін

2
Щоб додати до цього, ось список комбінованих символів, що використовуються вище, або через текст для створення "Zalgo text": zalgotextgenerator.com/unicode
VKK

270

Текст Zalgo працює через поєднання символів. Це спеціальні символи, які дозволяють змінювати символи, що виникають раніше.

введіть тут опис зображення

АБО

y + ̆ = y̆, що є насправді

y + ̆ = y̆

Оскільки ви можете складати їх один на інший, ви можете створити наступне:


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

що насправді є:

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

Те ж саме стосується розміщення речей під ним:


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



що насправді таке:

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

У Unicode основним блоком поєднання діакритики європейських мов та Міжнародного фонетичного алфавіту є U + 0300 – U + 036F.

Більше про це тут

Для складання списку поєднання діакритичних знаків ви можете скористатися наступним сценарієм (оскільки посилання продовжують вмирати)

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

Також перевірити їх



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


2
як би ти це набрав?
Aequitas

6
@Aequitas Якщо ви запитуєте про ALTкоди, ви цього не можете зробити, ви просто вставте y&#x0306;&#x0306;туди, де він потрапляє в "чистий" html, і браузер зробить це магією ...
Matas Vaitkevicius

2
@barbsan Привіт, дякую, що повідомили мені, що я замінив його сценарієм, який їх генерує.
Матас Вайткевічус

Цікаво, чому ти обрав саме цей приклад Y з тильдами. Це насправді має певне значення російською мовою, не впевнений, чи знайомий ви з цим.
СергійА

@SergeyA Я думаю, що він використовує цей приклад, тому що це той самий приклад, яким користується пов'язана сторінка wikipedia ( en.wikipedia.org/wiki/Combining_character ).
Міша
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.