ข้อความของ Zalgo ทำงานอย่างไร


694

ฉันเห็นข้อความที่จัดรูปแบบแปลก ๆ ที่เรียกว่า Zalgo เหมือนด้านล่างที่เขียนไว้ในฟอรัมต่างๆ มันดูน่ารำคาญ แต่มันทำให้ฉันรำคาญเพราะมันทำลายความคิดของฉันในสิ่งที่ตัวละครควรจะเป็น ความเข้าใจของฉันคือว่าตัวละครควรจะย้ายในแนวนอนข้ามเส้นและอยู่ใน "ภาชนะ" ที่แน่นอน เห็นได้ชัดว่าข้อความ Zalgo มีการเคลื่อนไหวในแนวตั้งและดูเหมือนจะไม่ถูก จำกัด พื้นที่

นี่เป็นข้อบกพร่อง / ข้อบกพร่อง / ใช้ประโยชน์ / แฮ็คใน Unicode หรือไม่ ตัวละครเหล่านี้มีคุณสมบัติแปลก ๆ หรือไม่? "เกิดอะไรขึ้น" ที่นี่


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



31
en.wikipedia.org/wiki/Combining_characterอาจเสนอเบาะแสบางอย่าง
ลูคัสโจนส์

2
สิ่งนี้อาจทำให้คุณทึ่ง
Burhan Ali

3
ในฐานะที่เป็นข้อมูลอ้างอิงบังคับxkcd.com/1857
mackycheese21

คำตอบ:


431

ข้อความใช้อักขระที่รวมกันหรือที่เรียกว่าการรวมเครื่องหมาย ดูหัวข้อ 2.11 ของการรวมอักขระในมาตรฐาน Unicode (PDF)

ใน Unicode การแสดงอักขระไม่ได้ใช้โมเดลเซลล์อักขระแบบง่ายที่สัญลักษณ์แต่ละอันควรใส่ลงในกล่องที่มีความสูงที่กำหนด เครื่องหมายรวมกันอาจแสดงผลด้านบนด้านล่างหรือด้านในอักขระพื้นฐาน

ดังนั้นคุณสามารถสร้างลำดับของอักขระได้อย่างง่ายดายประกอบด้วยเครื่องหมายพื้นฐานและเครื่องหมาย“ รวมด้านบน” ไม่ว่าจะยาวเท่าใดเพื่อให้ได้ความสูงของภาพที่ต้องการโดยสมมติว่าซอฟต์แวร์การสร้างภาพนั้นสอดคล้องกับโมเดลการเรนเดอร์ Unicode ลำดับดังกล่าวไม่มีความหมายแน่นอนและแม้แต่ลิงก็สามารถสร้างมันขึ้นมาได้ (เช่นให้แป้นพิมพ์ที่มีไดรเวอร์ที่เหมาะสม)

และคุณสามารถผสมเครื่องหมาย“ การรวมกันด้านบน” และ“ การรวมกันด้านล่าง”

ข้อความตัวอย่างในคำถามเริ่มต้นด้วย:


36
ยูนิโค้ดสามารถทำสิ่งนี้ได้เพราะจงใจทำตามอย่างไม่มีสิ่งใดนอกจาก "การใช้อักขระในโลกแห่งความเป็นจริง" โดยซอฟต์แวร์คาดว่าจะสอดคล้องกับ Unicode U+1F4A9และนี่คือเหตุผลที่เรามีเช่น
Camilo Martin

2
นี่คือรายการของการรวมอักขระที่ใช้ด้านบนด้านล่างหรือผ่านข้อความเพื่อสร้าง "ข้อความ Zalgo": zalgotextgenerator.com/unicode
VKK

270

ข้อความ Zalgo ทำงานได้เนื่องจากมีการรวมอักขระ เหล่านี้เป็นอักขระพิเศษที่อนุญาตให้แก้ไขอักขระที่มาก่อน

ป้อนคำอธิบายรูปภาพที่นี่

หรือ

y + ̆ = y̆ซึ่งจริงๆแล้วคือ

y + ̆ = y̆

เนื่องจากคุณสามารถสแต็คหนึ่งไฟล์บนอีกอันหนึ่งคุณจึงสามารถสร้างสิ่งต่อไปนี้:


Y

ซึ่งอันที่จริงคือ:

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

เช่นเดียวกับการวางสิ่งของไว้ใต้:


Y



ที่จริงแล้วคือ:

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

ใน Unicode บล็อกหลักของการรวมกำกับสำหรับภาษายุโรปและตัวอักษรสัทศาสตร์สากลคือ U + 0300 – U + 036F

เพิ่มเติมเกี่ยวกับที่นี่

ในการสร้างรายการการรวมเครื่องหมายกำกับเสียงคุณสามารถใช้สคริปต์ต่อไปนี้ (เนื่องจากลิงก์ยังคงมีอยู่)

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

ยังตรวจสอบเลย



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


2
คุณจะพิมพ์มันอย่างไร
Aequitas

6
@Aequitas หากคุณถามเกี่ยวกับALTรหัสคุณไม่สามารถทำแบบนั้นได้ว่าคุณจะวางในy&#x0306;&#x0306;ตำแหน่งที่ 'บริสุทธิ์' HTML และเบราว์เซอร์จะทำสิ่งมหัศจรรย์ ...
Matas Vaitkevicius

2
@ barbsan สวัสดีขอบคุณที่แจ้งให้ฉันทราบฉันได้แทนที่ด้วยสคริปต์ที่สร้างพวกเขา
Matas Vaitkevicius

ฉันสงสัยว่าทำไมคุณถึงเลือกตัวอย่างเฉพาะของ Y กับ tildae จริงๆแล้วมันมีความหมายบางอย่างในรัสเซียไม่แน่ใจว่าคุณคุ้นเคยหรือไม่
SergeyA

@SergeyA ฉันคิดว่าเขาใช้ตัวอย่างนี้เพราะเป็นตัวอย่างเดียวกันกับหน้าวิกิพีเดียที่เชื่อมโยง ( en.wikipedia.org/wiki/Combining_character ) กำลังใช้งานอยู่
Mischa
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.