Văn bản Zalgo hoạt động như thế nào?


694

Tôi đã thấy văn bản được định dạng kỳ lạ được gọi là Zalgo như dưới đây được viết trên các diễn đàn khác nhau. Thật khó chịu khi nhìn vào, nhưng nó thực sự làm phiền tôi vì nó làm suy yếu quan niệm của tôi về những gì một nhân vật được cho là. Hiểu biết của tôi là một nhân vật được cho là di chuyển theo chiều ngang trên một dòng và ở trong một "thùng chứa" nhất định. Rõ ràng văn bản Zalgo đang di chuyển theo chiều dọc và dường như không bị giới hạn ở bất kỳ không gian nào.

Đây có phải là lỗi / lỗ hổng / khai thác / hack trong Unicode không? Là những nhân vật cá nhân có tính chất kỳ lạ? "Có chuyện gì đang xảy ra ở đây?


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



31
vi.wikipedia.org/wiki/Combining_character có thể cung cấp một số manh mối.
Lucas Jones

2
Điều này cũng có thể thổi bay tâm trí của bạn: en.wikipedia.org/wiki/ Kẻ
Burhan Ali

3
Là tài liệu tham khảo bắt buộc, xkcd.com/1857
mackycheese21

Câu trả lời:


431

Văn bản sử dụng kết hợp các ký tự, còn được gọi là dấu kết hợp. Xem phần 2.11 của Kết hợp các ký tự trong Tiêu chuẩn Unicode (PDF).

Trong Unicode, kết xuất ký tự không sử dụng mô hình ô ký tự đơn giản trong đó mỗi glyph khớp với một hộp có chiều cao cho trước. Dấu kết hợp có thể được hiển thị ở trên, bên dưới hoặc bên trong một ký tự cơ sở

Vì vậy, bạn có thể dễ dàng xây dựng một chuỗi ký tự, bao gồm một ký tự cơ bản và kết hợp trên các dấu hiệu của bất kỳ chiều dài nào, để đạt được bất kỳ chiều cao hình ảnh mong muốn nào, giả sử rằng phần mềm kết xuất phù hợp với mô hình kết xuất Unicode. Một chuỗi như vậy tất nhiên không có ý nghĩa gì, và thậm chí một con khỉ có thể tạo ra nó (ví dụ, được cung cấp một bàn phím với trình điều khiển phù hợp).

Và bạn có thể kết hợp giữa các kết hợp trên và kết hợp trên các điểm khác nhau.

Văn bản mẫu trong câu hỏi bắt đầu bằng:


36
Unicode có thể làm điều này bởi vì nó cố tình tuân thủ không có gì ngoài "cách sử dụng các ký tự trong thế giới thực" - phần mềm sau đó được cho là sẽ phù hợp với Unicode. Và đây là lý do tại sao chúng ta có ví dụ , U+1F4A9.
Camilo Martin

2
Chỉ cần thêm vào đây, đây là danh sách các ký tự kết hợp được sử dụng bên dưới hoặc thông qua văn bản để tạo "văn bản Zalgo": zacheotextgenerator.com/unicode
VKK 22/03/2016

270

Văn bản Zalgo hoạt động vì kết hợp các ký tự. Đây là những nhân vật đặc biệt cho phép sửa đổi nhân vật đi trước.

nhập mô tả hình ảnh ở đây

HOẶC LÀ

y + = y̆ mà thực sự là

y + ̆ = y̆

Vì bạn có thể xếp chúng lên nhau, bạn có thể tạo ra các mục sau:


vâng

mà thực sự là:

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

Điều tương tự cũng xảy ra với việc đặt những thứ bên dưới:


vâng



thực tế là:

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

Trong Unicode, khối chính của việc kết hợp các dấu phụ cho các ngôn ngữ châu Âu và Bảng chữ cái ngữ âm quốc tế là U + 0300 1.000 U + 036F.

Thêm về nó ở đây

Để tạo danh sách kết hợp các dấu phụ, bạn có thể sử dụng tập lệnh sau (vì các liên kết tiếp tục chết)

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

Ngoài ra kiểm tra em ra



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


2
Làm thế nào bạn sẽ gõ nó?
Aequitas

6
@Aequitas Nếu bạn đang hỏi về ALTmã thì bạn không thể làm điều đó, bạn chỉ cần dán y&#x0306;&#x0306;nơi nó vào html 'thuần' và trình duyệt sẽ làm điều đó thật kỳ diệu ...
Matas Vaitkevicius

2
@barbsan Xin chào, cảm ơn vì đã cho tôi biết, tôi đã thay thế nó bằng một kịch bản tạo ra chúng.
Matas Vaitkevicius

Tôi tự hỏi tại sao bạn lại chọn ví dụ đặc biệt này của Y với một dấu ngã. Nó thực sự có một số ý nghĩa trong tiếng Nga, không chắc bạn có quen với điều đó không.
SergeyA

@SergeyA Tôi nghĩ rằng anh ấy sử dụng ví dụ này bởi vì đây là ví dụ rất giống trang wikipedia được liên kết ( en.wikipedia.org/wiki/Combining_character ) đang sử dụng.
Mischa
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.