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ǩ?̙͉̥̬͙̟̮͕ͤ̌͗ͩ̕͡
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:
-
ŁACIŃSKA WIELKA LITERA H -
H
-
ŁĄCZENIE ŁACIŃSKICH MAŁYCH LITERA T -
ͭ
-
POŁĄCZENIE GRECKIEGO KORONIS -
̓
-
COMBINING COMMA ABOVE -
̓
-
ŁĄCZENIE KROPKI POWYŻEJ -
̇
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.
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.
Możesz znaleźć listę kodów html tutaj
Zobacz też
M V
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