web-dev-qa-db-fra.com

Comment fonctionne le texte Zalgo?

J'ai vu du texte étrangement formaté appelé Zalgo, écrit ci-dessous sur différents forums. C'est un peu ennuyeux à regarder, mais ça me dérange vraiment parce que ça mine ma notion de ce qu'un personnage est supposé être. D'après ce que j'ai compris, un personnage est supposé se déplacer horizontalement sur une ligne et rester dans un certain "conteneur". De toute évidence, le texte de Zalgo se déplace verticalement et ne semble pas être limité à un espace.

Est-ce un bug/défaut/exploit/hack en Unicode? Ces personnages individuels ont-ils des propriétés étranges? "Que se passe-t-il ici?


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


661
Mike

Le texte utilise des caractères de combinaison, également appelés marques de combinaison. Voir la section 2.11 de Combinaison de caractères dans la norme Unicode (PDF).

En Unicode, le rendu des caractères n'utilise pas un modèle de cellule de caractère simple dans lequel chaque glyphe s'insère dans une zone de hauteur donnée. Les marques combinées peuvent être rendues au-dessus, au-dessous ou à l'intérieur d'un caractère de base

Ainsi, vous pouvez facilement construire une séquence de caractères, composée d'un caractère de base et de marques combinées ci-dessus, de n'importe quelle longueur, pour atteindre toute hauteur visuelle souhaitée, en supposant que le logiciel de rendu soit conforme au modèle de rendu Unicode. Une telle séquence n'a bien sûr pas de sens, et même un singe pourrait la produire (par exemple, avec un clavier avec un pilote approprié).

Et vous pouvez mélanger les marques "combinaison ci-dessus" et "combinaison ci-dessous".

L'exemple de texte de la question commence par:

413
Jukka K. Korpela

Le texte Zalgo fonctionne grâce à la combinaison de caractères. Ce sont des caractères spéciaux qui permettent de modifier le caractère qui précède.

enter image description here

OR

y + ̆ = y̆ qui est réellement

y + ̆ = y̆

Puisque vous pouvez les empiler les uns sur les autres, vous pouvez produire les éléments suivants:


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

qui est en réalité:

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

Il en va de même pour mettre des choses en dessous:


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



C'est en fait:

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

En Unicode, le groupe principal qui combine les signes diacritiques pour les langues européennes et l’alphabet phonétique international est U + 0300 – U + 036F.

Plus à ce sujet ici

Pour produire une liste de combinaisons de signes diacritiques, vous pouvez utiliser le script suivant (car les liens continuent de mourir)

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

Également vérifier em



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

257
Matas Vaitkevicius