ข้อความ Zalgo ดูเหมือนฟอนต์หลุดออกจากกรอบบรรทัด
Z̴̡̛̫̹̿a̵̡̳̋l̴̙̓g̶̤̈o̷̜̽
มันไม่ใช่ภาพ และโดยทั่วไปไม่ใช่ฟอนต์เสีย เอฟเฟกต์เกิดจากการวาง เครื่องหมายประกอบ จำนวนมากหลังอักขระฐานธรรมดา
หน้าที่เดิมของเครื่องหมายประกอบ
ระบบการเขียนทั่วโลกต้องใช้เครื่องหมายเสียง สระ วรรณยุกต์ และสัญลักษณ์อื่นที่สัมพันธ์กับอักขระข้างเคียง Unicode เข้ารหัสหลายชนิดเป็นเครื่องหมายประกอบที่ไม่กินระยะ
é แทนได้สองแบบ
- อักขระสำเร็จรูป U+00E9 LATIN SMALL LETTER E WITH ACUTE
- U+0065 LATIN SMALL LETTER E ตามด้วย U+0301 COMBINING ACUTE ACCENT
โค้ดพอยต์ตัวที่สองปรับตัวแรก ระบบวางเครื่องหมายเหนืออักษรฐานโดยไม่เลื่อนเคอร์เซอร์ไปหนึ่งความกว้างปกติ
เครื่องมือ Zalgo ใช้กลไกเดียวกัน แต่เพิ่มเครื่องหมายเหนือ ใต้ และกลางตัวอักษรมากกว่าที่การสะกดปกติต้องการ
เหตุใดจึงซ้อนได้รุนแรง
อักขระประกอบมี canonical combining class ช่วยกำหนดลำดับรอบอักษรฐาน ฟอนต์มีจุดยึดสำหรับชุดที่พบทั่วไป เมื่อเจอลำดับแปลกหรือยาวมาก ระบบเรนเดอร์ต้องจัดวางเท่าที่ทำได้
ฟอนต์หนึ่งอาจซ้อนอย่างเรียบร้อย อีกฟอนต์อาจปล่อยให้ชนกัน ทับบรรทัดข้างเคียง หรือยื่นออกจากปุ่ม ลำดับข้อความยังถูกต้อง แต่ส่วนติดต่อไม่ได้ออกแบบมารองรับเครื่องหมายหลายสิบตัวบนอักษรเดียว
นี่จึงเป็นเหตุผลที่เบราว์เซอร์และระบบปฏิบัติการแสดงต่างกัน Unicode กำหนดอักขระและคุณสมบัติ ส่วนฟอนต์กำหนดรูปและตำแหน่ง
Normalization ไม่ได้แปลว่า “ลบเครื่องหมาย”
Unicode normalization ช่วยเปรียบเทียบลำดับที่เทียบเท่ากัน NFC อาจรวมฐานกับเครื่องหมายเมื่อมีอักขระสำเร็จรูป ส่วน NFD แยกอักขระสำเร็จรูปออก ทั้งสองยังเรียงเครื่องหมายตามลำดับมาตรฐาน
แต่มันไม่ใช่เครื่องมือล้าง Zalgo ชุดสุดขั้วส่วนใหญ่ไม่มีอักขระสำเร็จรูป เครื่องหมายจึงยังอยู่หลัง normalization
หากผลิตภัณฑ์ต้องการตัวเลือก “ข้อความธรรมดา” ต้องตัดสินแยกว่าส่วนใดเป็นภาษาและส่วนใดเป็นการตกแต่ง การลบเครื่องหมายทั้งหมดจะทำลายภาษาเวียดนาม อาหรับ ฮีบรู อักษรอินเดีย และภาษาอื่นอีกมาก
หนึ่งตัวที่เห็นอาจมีหลายโค้ดพอยต์
กฎแบ่งข้อความของ Unicode จัดฐานและเครื่องหมายที่ตามมาไว้ในกลุ่มกราฟีมขยายเดียว เคอร์เซอร์จึงเดินผ่าน é เป็นหนึ่งหน่วยได้แม้มีสองโค้ดพอยต์
Zalgo ผลักกฎนี้ไปสุดทาง หนึ่งตัวที่เห็นอาจมีสิบ ยี่สิบ หรือมากกว่า ส่งผลต่อข้อจำกัดฐานข้อมูล การตัดข้อความ การเลือก ความสูงบรรทัด การค้นหา และโปรแกรมอ่านหน้าจอ
ความยาวที่คนเห็นไม่เท่ากับความยาวที่คอมพิวเตอร์เก็บ
การตกแต่งบนโครงสร้างภาษาที่จำเป็น
เครื่องหมายประกอบไม่ใช่ “อักขระไม่ดี” แต่จำเป็นต่อการเขียนดิจิทัล เอฟเฟกต์นี้เกิดได้เพราะ Unicode รองรับระบบอักษรซับซ้อน
ความเสี่ยงมาจากปริมาณและบริบท กองขนาดใหญ่ทำให้อ่านยาก สร้างบรรทัดสูงผิดปกติ และซ่อนความแตกต่างที่ระบบอัตโนมัติยังประมวลผล งานวิจัยยังพบว่าอักขระที่มองไม่เห็น ตัวเหมือน และการสลับลำดับอาจรบกวนระบบภาษา
ใช้อย่างไรไม่ให้หน้าพัง
- ใช้กับหัวข้อสั้นหรือคำเดียว
- เลือกความเข้มต่ำถึงกลาง
- ตรวจในแอปปลายทาง
- ใส่ข้อความปกติด้วยเมื่อเนื้อหาสำคัญ
- หลีกเลี่ยงชื่อบัญชี ลิงก์ อีเมล และข้อมูลความปลอดภัย
Zalgo คือการออกแบบตัวอักษรด้วยการสะสม อักษรฐานยังธรรมดา แต่เครื่องหมาย Unicode จริงสร้างรูปร่างที่ไม่ธรรมดา
เครื่องมือสร้างข้อความกลิทช์ให้ปรับจำนวนเครื่องหมายได้ เริ่มเบา ๆ แล้วตรวจผลในกล้องจุลทรรศน์