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

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

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


Hơw dŏes з҉҉ąĺgo т е҉xț worǩ?


2 ответов


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

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

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

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

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


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

enter image description here

или

y + = y, который на самом деле

y + ̆ = y̆

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


y

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

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

то же самое касается размещения вещей нижний:


y



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

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

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

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

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

также проверьте em из



M V