Jak działa Zalgo text?

Widziałem dziwnie sformatowany tekst o nazwie Zalgo jak poniżej pisany na różnych forach. To trochę denerwujące patrzeć na to, ale to naprawdę przeszkadza mi, ponieważ podważa moje wyobrażenie o tym, co postać ma być. Rozumiem, że postać powinna poruszać się poziomo po linii i pozostać w pewnym "kontenerze". Oczywiście tekst Zalgo porusza się pionowo i nie wydaje się być ograniczony do żadnej przestrzeni.

Czy to błąd/wada/exploit / hack w Unicode? Czy te pojedyncze postacie mają dziwne właściwości? Co tu się dzieje?


Hơw dŏs Z ą ąĺgo te ҉ xț worǩ?̙͉̥̬͙̟̮͕ͤ̌͗ͩ̕͡


Author: MD XF, 2011-07-05

2 answers

Tekst wykorzystuje znaki łączące, znane również jako znaki łączące. Patrz punkt 2.11łączenie znaków w standardzie Unicode (PDF).

W Unicode, renderowanie znaków nie używa prostego modelu komórki znakowej, gdzie każdy glif mieści się w polu o określonej wysokości. Znaki łączące mogą być renderowane powyżej, poniżej lub wewnątrz znaku bazowego

Więc można łatwo skonstruować ciąg znaków, składający się ze znaku bazowego i "łącząc wyżej" oznacza dowolną długość, aby osiągnąć dowolną wysokość wizualną, zakładając, że oprogramowanie renderujące jest zgodne z modelem renderowania Unicode. Taka sekwencja nie ma oczywiście żadnego znaczenia i nawet małpa mogłaby ją wyprodukować (np. mając klawiaturę z odpowiednim sterownikiem).

I możesz mieszać znaki "combining above" i "combining below".

Przykładowy tekst w pytaniu zaczyna się od:

 377
Author: Jukka K. Korpela,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-05 06:42:16

Zalgo tekst działa ze względu na łączenie znaków. Są to znaki specjalne, które pozwalają modyfikować znaki, które pojawiają się wcześniej.

Tutaj wpisz opis obrazka

Lub

Y + = y, które w rzeczywistości jest

y + ̆ = y̆

Ponieważ możesz układać je jeden na drugim, możesz wyprodukować następujące:


Y

Które w rzeczywistości jest:

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

To samo dotyczy umieszczania rzeczy pod spodem:


Y



to w rzeczywistości jest:

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

W Unicode głównym blokiem łączenia znaków diakrytycznych dla Języków Europejskich I Międzynarodowego alfabetu fonetycznego jest U + 0300–u + 036F.

Więcej o tym tutaj

Możesz znaleźć listę kodów html tutaj

Zobacz też



M V

 200
Author: Matas Vaitkevicius,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-24 09:02:24