Eu vi textos estranhamente formatados chamados Zalgo, como abaixo, escritos em vários fóruns. É meio chato de se olhar, mas realmente me incomoda porque prejudica minha noção do que um personagem deveria ser. Meu entendimento é que um personagem deve se mover horizontalmente através de uma linha e permanecer dentro de um determinado "container". Obviamente, o texto do Zalgo está se movendo verticalmente e não parece estar restrito a nenhum espaço.
Isso é um bug / falha / exploit / hack no Unicode? Esses caracteres individuais têm propriedades estranhas? "O que esta acontecendo aqui?
H̡̫̤̤̣͉̤ͭ̓̓̇͗̎̀ơ̯̗̱̘̮͒̄̀̈ͤ̀͡w͓̲͙͖̥͉̹͋ͬ̊ͦ̂̀̚ ͎͉͖̌ͯͅͅd̳̘̿̃̔̏ͣ͂̉̕ŏ̖̙͋ͤ̊͗̓͟͜e͈͕̯̮̙̣͓͌ͭ̍̐̃͒s͙͔̺͇̗̱̿̊̇͞ ̸̤͓̞̱̫ͩͩ͑̋̀ͮͥͦ̊Z̆̊͊҉҉̠̱̦̩͕ą̟̹͈̺̹̋̅ͯĺ̡̘̹̻̩̩͋͘g̪͚͗ͬ͒o̢̖͇̬͍͇͓̔͋͊̓ ̢͈͙͂ͣ̏̿͐͂ͯ͠t̛͓̖̻̲ͤ̈ͣ͝e͋̄ͬ̽͜҉͚̭͇ͅx͎̬̠͇̌ͤ̓̂̓͐͐́͋͡ț̗̹̝̄̌̀ͧͩ̕͢ ̮̗̩̳̱̾w͎̭̤͍͇̰̄͗ͭ̃͗ͮ̐o̢̯̻̰̼͕̾ͣͬ̽̔̍͟ͅr̢̪͙͍̠̀ͅǩ̵̶̗̮̮ͪ́? ̙͉̥̬͙̟̮͕ͤ̌͗ͩ̕͡
Respostas:
O texto usa caracteres combinados, também conhecidos como marcas combinadas. Consulte a seção 2.11 de Combinar caracteres no padrão Unicode (PDF).
No Unicode, a renderização de caracteres não usa um modelo simples de célula de caracteres em que cada glifo se encaixa em uma caixa com determinada altura. Marcas combinadas podem ser renderizadas acima, abaixo ou dentro de um caractere base
Assim, você pode construir facilmente uma sequência de caracteres, consistindo em um caractere base e marcas "combinadas acima", de qualquer comprimento, para atingir qualquer altura visual desejada, assumindo que o software de renderização esteja em conformidade com o modelo de renderização Unicode. Essa sequência não tem significado, é claro, e até um macaco poderia produzi-la (por exemplo, dado um teclado com o driver adequado).
E você pode misturar as marcas "combinando acima" e "combinando abaixo".
O texto de exemplo na pergunta começa com:
H
ͭ
̓
̓
̇
fonte
U+1F4A9
.O texto do Zalgo funciona devido à combinação de caracteres. Esses são caracteres especiais que permitem modificar os caracteres anteriores.
OU
y + ̆ = y̆ que na verdade é
Como você pode empilhá-los um sobre o outro, você pode produzir o seguinte:
y̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆
que na verdade é:
O mesmo vale para colocar coisas por baixo:
y̰̰̰̰̰̰̰̰̰̰̰̰̰̰̰̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆
que de fato é:
Em Unicode, o principal bloco de combinação de diacríticos para idiomas europeus e o Alfabeto fonético internacional é U + 0300 – U + 036F.
Mais sobre isso aqui
Para produzir uma lista de combinação de marcas diacríticas, você pode usar o seguinte script (como os links continuam morrendo)
Também confira
Mͣͭͣ̾ Vͣͥͭ͛ͤͮͥͨͥͧ̾
fonte
ALT
códigos, então você não pode fazer isso, você poderia simplesmente colary̆̆
onde fica em 'puro' html e navegador faria isso de magia ...