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

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

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


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


Ответ 1

В тексте используются комбинированные символы, также известные как комбинированные метки. См. Раздел 2.11 Объединение символов в стандарте Unicode (PDF).

В Unicode рендеринг символов не использует простую модель ячейки персонажа, где каждый глиф вписывается в поле с заданной высотой. Комбинированные метки могут отображаться выше, ниже или внутри базового символа.

Таким образом, вы можете легко создать последовательность символов, состоящую из базового символа и "сочетания выше" меток любой длины, чтобы достичь любой желаемой визуальной высоты, предполагая, что программное обеспечение рендеринга соответствует модели рендеринга Unicode. Разумеется, такая последовательность не имеет никакого значения, и даже обезьяна может ее производить (например, с клавиатуры с подходящим драйвером).

И вы можете смешать метки "комбинировать выше" и "комбинировать ниже".

Образец текста в вопросе начинается с:

Ответ 2

Текст Zalgo работает из-за объединения символов. Это специальные символы, которые позволяют изменять характер, который предшествует.

enter image description here

ИЛИ

y + ̆ = y̆ which actually is

y + ̆ = y̆

Поскольку вы можете складывать их поверх другого, вы можете создать следующее:


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

который на самом деле есть:

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

То же самое можно сказать и о том,


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



это на самом деле:

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

В Юникоде основным блоком объединения диакритики для европейских языков и Международного фонетического алфавита является U + 0300-U + 036F.

Подробнее об этом здесь

Здесь можно найти список html-кодов

Также проверьте em out



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