Как работает текст Zalgo?

694

Я видел странно отформатированный текст под названием Zalgo, как показано ниже, на различных форумах. На это немного раздражает взгляд, но это действительно беспокоит меня, потому что это подрывает мое представление о том, каким должен быть персонаж. Насколько я понимаю, персонаж должен двигаться горизонтально через линию и оставаться в определенном «контейнере». Очевидно, что текст Zalgo движется вертикально и, кажется, не ограничен каким-либо пространством.

Это ошибка / ошибка / эксплойт / хак в Юникоде? Являются ли эти отдельные персонажи странными свойствами? "Что здесь происходит?


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. Такая последовательность, конечно, не имеет смысла, и даже обезьяна могла бы ее создать (например, с помощью клавиатуры с подходящим драйвером).

И вы можете смешивать метки «комбинирование сверху» и «комбинирование снизу».

Пример текста в вопросе начинается с:

Юкка К. Корпела
источник
36
Unicode может сделать это, потому что он сознательно соответствует ничему, кроме «реального использования символов» - тогда ожидается, что программное обеспечение будет соответствовать Unicode. И вот почему у нас есть, например U+1F4A9.
Камило Мартин,
2
Просто добавить к этому, вот список сочетания символов , используемый выше ниже, или через текст , чтобы генерировать «Zalgo текст»: zalgotextgenerator.com/unicode
ВКК
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, и браузер сделает это волшебно ...
Матас Вайткявичюс
2
@barbsan Привет, спасибо, что сообщили мне, я заменил его на скрипт, который их генерирует.
Матас Вайткявичюс
Интересно, почему вы выбрали именно этот пример Y с тильдой? Это на самом деле имеет какое-то значение на русском языке, не уверен, если вы знакомы с этим.
SergeyA
@SergeyA Я думаю, что он использует этот пример, потому что это тот же самый пример, который используется на связанной странице википедии ( en.wikipedia.org/wiki/Combining_character ).
Миша