Na różnych forach widziałem dziwnie sformatowany tekst o nazwie Zalgo, jak poniżej. To trochę denerwujące, ale naprawdę przeszkadza mi, ponieważ podważa moje wyobrażenie o tym, jaka postać powinna być. Rozumiem, że postać powinna poruszać się poziomo przez linię i pozostać w pewnym „pojemniku”. Oczywiście tekst Zalgo porusza się w pionie i nie wydaje się być ograniczony do żadnej przestrzeni.
Czy to jest błąd / błąd / exploit / hack w Unicode? Czy te pojedyncze postacie mają dziwne właściwości? "Co tu się dzieje?
H̡̫̤̤̣͉̤ͭ̓̓̇͗̎̀ơ̯̗̱̘̮͒̄̀̈ͤ̀͡w͓̲͙͖̥͉̹͋ͬ̊ͦ̂̀̚ ͎͉͖̌ͯͅͅd̳̘̿̃̔̏ͣ͂̉̕ŏ̖̙͋ͤ̊͗̓͟͜e͈͕̯̮̙̣͓͌ͭ̍̐̃͒s͙͔̺͇̗̱̿̊̇͞ ̸̤͓̞̱̫ͩͩ͑̋̀ͮͥͦ̊Z̆̊͊҉҉̠̱̦̩͕ą̟̹͈̺̹̋̅ͯĺ̡̘̹̻̩̩͋͘g̪͚͗ͬ͒o̢̖͇̬͍͇͓̔͋͊̓ ̢͈͙͂ͣ̏̿͐͂ͯ͠t̛͓̖̻̲ͤ̈ͣ͝e͋̄ͬ̽͜҉͚̭͇ͅx͎̬̠͇̌ͤ̓̂̓͐͐́͋͡ț̗̹̝̄̌̀ͧͩ̕͢ ̮̗̩̳̱̾w͎̭̤͍͇̰̄͗ͭ̃͗ͮ̐o̢̯̻̰̼͕̾ͣͬ̽̔̍͟ͅr̢̪͙͍̠̀ͅǩ̵̶̗̮̮ͪ?? ̙͉̥̬͙̟̮͕ͤ̌͗ͩ̕͡
Odpowiedzi:
Tekst używa łączenia znaków, znanego również jako łączenie znaków. Zobacz rozdział 2.11 Łączenie znaków w standardzie Unicode (PDF).
W Unicode do renderowania znaków nie stosuje się prostego modelu komórek znakowych, w którym każdy glif pasuje do ramki o podanej wysokości. Łączące znaki mogą być renderowane powyżej, poniżej lub wewnątrz znaku podstawowego
W ten sposób można łatwo skonstruować sekwencję znaków składającą się ze znaku podstawowego i znaków „łączących się powyżej” o dowolnej długości, aby osiągnąć dowolną pożądaną wysokość wizualną, przy założeniu, że oprogramowanie do renderowania jest zgodne z modelem renderowania Unicode. Taka sekwencja nie ma oczywiście znaczenia, a nawet małpa mogłaby ją wyprodukować (np. Mając klawiaturę z odpowiednim sterownikiem).
I możesz łączyć znaki „łączenie powyżej” i „łączenie poniżej”.
Przykładowy tekst pytania zaczyna się od:
H
ͭ
̓
̓
̇
źródło
U+1F4A9
.Tekst Zalgo działa z powodu łączenia znaków. Są to znaki specjalne, które pozwalają modyfikować znaki występujące wcześniej.
LUB
y + ̆ = y̆, które faktycznie jest
Ponieważ możesz układać je jeden na drugim, możesz wykonać następujące czynności:
y̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆
co w rzeczywistości jest:
To samo dotyczy umieszczania rzeczy pod spodem:
y̰̰̰̰̰̰̰̰̰̰̰̰̰̰̰̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆
w rzeczywistości jest to:
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
Aby utworzyć listę łączących znaków diakrytycznych, możesz użyć następującego skryptu (ponieważ linki wciąż umierają)
Sprawdź je również
Mͣͭͣ̾ Vͣͥͭ͛ͤͮͥͨͥͧ̾
źródło
ALT
kody, nie możesz tego zrobić, po prostu wklejaszy̆̆
tam, gdzie dostaje się do „czystego” HTML, a przeglądarka robi magię ...