ตัวอักษรล่องหนคืออักขระพิเศษของ Unicode ที่แสดงบนหน้าจอเป็นที่ว่าง มองไม่เห็นตัวหนังสือ แต่แอปนับเป็นตัวอักษรจริงหนึ่งตัว จึงใช้ทำชื่อว่าง ข้อความว่าง หรือเว้นช่องในจุดที่ช่องว่างธรรมดาถูกตัดทิ้งได้ ตัวที่ถูกใช้บ่อยคือ Hangul Filler (U+3164) กับ Braille Pattern Blank (U+2800) ตารางด้านล่างมีช่องให้คัดลอกครบทุกตัว ส่วนสัญลักษณ์ทั่วไปอย่างหัวใจ ดาว ลูกศร ไปที่คลังสัญลักษณ์พิเศษคลิกคัดลอกได้เลย
บทความนี้อธิบายว่าอักขระแต่ละตัวต่างกันยังไง ทำไมช่องว่างธรรมดาถึงใช้แทนไม่ได้ วิธีคัดลอกไปใช้ และที่คนมักไม่รู้คือ ตัวอักษรล่องหนอาจติดมากับข้อความที่คัดลอกมาโดยไม่รู้ตัว ทำให้ค้นหาไม่เจอหรือลิงก์เพี้ยน พร้อมวิธีเช็กว่าข้อความของคุณมีตัวซ่อนอยู่หรือไม่
ตัวอักษรล่องหนที่ใช้บ่อย 5 ตัว พร้อมช่องคัดลอก
ช่องในคอลัมน์ "ช่องคัดลอก" มีอักขระนั้นอยู่ตัวเดียว ถ้าใช้คอมพิวเตอร์ให้คลิกสามครั้งที่ช่องเพื่อเลือก ถ้าใช้มือถือให้แตะค้างที่ช่องแล้วเลือกคัดลอก ส่วนข้อมูลหมวดและคุณสมบัติในตารางนำมาจากฐานข้อมูลอักขระของ Unicode (UnicodeData, PropList และ DerivedCoreProperties)
| ชื่ออักขระ | รหัส | ช่องคัดลอก | ข้อมูลตาม Unicode |
|---|---|---|---|
| Hangul Filler | U+3164 | ㅤ | หมวด Lo (อักษร) ไม่ใช่ช่องว่าง แต่เป็นอักขระที่ Unicode ระบุว่าให้ไม่แสดงผล (Default Ignorable) |
| Braille Pattern Blank | U+2800 | ⠀ | หมวด So (สัญลักษณ์) คือช่องเบรลล์ที่ไม่มีจุดเลย ไม่ใช่ช่องว่าง และไม่อยู่ในกลุ่ม Default Ignorable |
| Zero Width Space | U+200B | | หมวด Cf (จัดรูปแบบ) กว้างศูนย์ ไม่ใช่ช่องว่างตามนิยาม White_Space ใช้เป็นจุดที่ตัดบรรทัดได้ |
| Halfwidth Hangul Filler | U+FFA0 | ᅠ | หมวด Lo คล้าย U+3164 แต่เป็นแบบครึ่งความกว้าง และเป็น Default Ignorable |
| Word Joiner | U+2060 | | หมวด Cf กว้างศูนย์ มีหน้าที่ห้ามตัดบรรทัดตรงจุดนั้น เป็น Default Ignorable |
ความกว้างที่มองเห็นจริงขึ้นกับฟอนต์และแอปที่ใช้แสดงผล เช่น U+2800 อาจแสดงเป็นช่องเล็กๆ หรือกล่องในฟอนต์ที่ไม่มีสัญลักษณ์เบรลล์ จึงควรลองดูในแอปปลายทางจริงก่อนใช้งานสำคัญ
ทำไมช่องว่างธรรมดาใช้แทนไม่ได้
ช่องว่างธรรมดา (U+0020) กับช่องว่างไม่ตัดบรรทัด (U+00A0) อยู่ในรายการ White_Space ของ Unicode ซึ่งโปรแกรมจำนวนมากใช้เป็นเกณฑ์ตัดช่องว่างหัวท้ายข้อความทิ้งก่อนบันทึก เมื่อทดสอบด้วยฟังก์ชัน trim() ของ JavaScript พบว่าช่องว่างธรรมดาถูกตัดจนข้อความเหลือว่าง แต่ U+3164, U+2800, U+200B, U+FFA0 และ U+2060 ไม่ถูกตัด เพราะไม่ได้เป็น White_Space
นี่คือเหตุผลที่ชื่อที่พิมพ์ด้วยการเคาะ Space อย่างเดียวมักถูกแอปปฏิเสธว่า "ห้ามเว้นว่าง" ขณะที่ตัวอักษรล่องหนผ่านเงื่อนไขนี้ได้ในหลายกรณี ข้อสำคัญคือผลทดสอบข้างต้นเป็นพฤติกรรมของ JavaScript เท่านั้น แต่ละแอปมีกฎของตัวเอง บางแอปตรวจอักขระกลุ่ม Default Ignorable แล้วปฏิเสธหรือลบทิ้ง จึงไม่มีตัวไหนที่การันตีว่าใช้ได้ทุกที่
วิธีคัดลอกตัวอักษรล่องหนไปใช้
- เลือกอักขระจากตารางด้านบน เริ่มจาก U+3164 ก่อน เพราะมีความกว้างเห็นผลชัด และเป็นตัวที่พบบ่อยในคู่มือการตั้งชื่อว่าง
- คัดลอก โดยคลิกสามครั้งที่ช่องคัดลอก (คอมพิวเตอร์) หรือแตะค้างแล้วเลือกคัดลอก (มือถือ) ถ้าเลือกไม่ติด ให้ลากคลุมจากท้ายข้อความของช่องข้างหน้าให้ครอบช่องคัดลอก วางลงโปรแกรมจดบันทึกก่อน แล้วลบส่วนที่เกินออกให้เหลือเฉพาะอักขระล่องหน
- วางในช่องปลายทาง เช่น ช่องชื่อ ช่องข้อความ หรือช่องไบโอ แล้วกดบันทึก
- ถ้าแอปไม่ยอมรับ ให้เปลี่ยนไปลองตัวถัดไป ลำดับที่แนะนำคือ U+3164, U+2800 แล้วจึง U+200B หรืออักขระอื่น
ถ้าต้องการวางหลายตัวต่อกันเพื่อให้ช่องกว้างขึ้น ให้คัดลอกตัวเดิมวางซ้ำ ไม่จำเป็นต้องผสมหลายชนิด แต่การผสมมีโอกาสทำให้บางแอปปฏิเสธเพราะตรวจพบอักขระผิดปกติ
ที่ที่คนมักลองใช้ตัวอักษรล่องหน
- ชื่อไฮไลต์ ชื่อเล่น หรือชื่อโปรไฟล์: ใช้เมื่ออยากให้ช่องชื่อดูว่างเพื่อความมินิมอล
- ข้อความว่างในแชท: ส่งข้อความที่ไม่มีตัวหนังสือ ซึ่งบางแอปไม่ยอมให้ส่งข้อความที่ว่างจริงๆ
- ชื่อในเกมออนไลน์: เกมที่ไม่อนุญาตให้ใช้ช่องว่างล้วนในชื่อ ผู้เล่นบางคนลองใช้ตัวอักษรล่องหนแทน
- เว้นระยะในไบโอหรือแคปชั่น: ทำย่อหน้าหรือเว้นบรรทัดในที่ที่ระบบตัดช่องว่างทิ้ง
แพลตฟอร์มเหล่านี้ปรับกฎการตรวจชื่อและข้อความได้ตลอดเวลา วิธีที่ใช้ได้เมื่อเดือนก่อนอาจใช้ไม่ได้ในเดือนนี้ บทความนี้จึงไม่รับรองผลกับแอปใดแอปหนึ่ง ให้ทดลองกับบัญชีของตัวเองและอ่านเงื่อนไขการใช้งานของแอปนั้นประกอบ
ตัวอักษรซ่อนที่ติดมากับข้อความโดยไม่รู้ตัว
ด้านกลับของเรื่องนี้คือ ข้อความที่คัดลอกมาจากเว็บ เอกสาร หรือแชท อาจมีตัวอักษรล่องหนปนมาด้วยโดยที่เราไม่ได้ตั้งใจ ผลที่พบบ่อยคือ
- ค้นหาคำในเอกสารไม่เจอ ทั้งที่มองเห็นคำนั้นอยู่
- วางชื่อหรือรหัสในแบบฟอร์มแล้วระบบแจ้งว่าไม่ถูกต้อง
- ลิงก์ที่คัดลอกมาเปิดไม่ได้ เพราะมีอักขระซ่อนต่อท้าย
- สองข้อความที่ดูเหมือนกันทุกตัว แต่โปรแกรมเทียบแล้วบอกว่าไม่เท่ากัน
เช็กด้วยตัวนับตัวอักษร
วิธีที่ง่ายที่สุดคือวางข้อความลงในเครื่องมือนับคำและตัวอักษรแล้วเทียบจำนวนตัวอักษรที่เครื่องมือรายงานกับจำนวนที่คุณนับด้วยสายตา ตัวอักษรล่องหนแต่ละตัวนับเป็น 1 ตัวอักษร ถ้าตัวเลขสูงกว่าที่เห็น แสดงว่ามีตัวซ่อนอยู่ รายละเอียดการนับภาษาไทยอ่านต่อได้ในบทความนับคำภาษาไทย
เช็กจากลิงก์ที่ถูกเข้ารหัส
ถ้าลิงก์ที่คัดลอกมามีรหัสแปลกๆ ต่อท้าย ให้ดูว่ารหัสตรงกับตารางนี้หรือไม่ ค่าด้านล่างคำนวณจากการเข้ารหัส UTF-8 ตามหลักเดียวกับที่อธิบายไว้ในบทความ URL Encode ลิงก์ภาษาไทย
| อักขระ | รหัส | ไบต์ UTF-8 | เมื่ออยู่ในลิงก์ |
|---|---|---|---|
| Zero Width Space | U+200B | 3 | %E2%80%8B |
| Hangul Filler | U+3164 | 3 | %E3%85%A4 |
| Braille Pattern Blank | U+2800 | 3 | %E2%A0%80 |
| Halfwidth Hangul Filler | U+FFA0 | 3 | %EF%BE%A0 |
| Word Joiner | U+2060 | 3 | %E2%81%A0 |
ล้างตัวซ่อนออก
เมื่อพบว่ามีตัวซ่อน วิธีล้างที่ปลอดภัยที่สุดคือพิมพ์คำหรือรหัสนั้นใหม่ด้วยมือแทนการคัดลอก หรือวางข้อความผ่านโปรแกรมจดบันทึกแบบข้อความล้วนก่อน แล้วลบส่วนที่น่าสงสัยทิ้ง ถ้าต้องจัดรูปแบบข้อความทั้งก้อน การแปลงข้อความอย่างในบทความเปลี่ยนตัวพิมพ์เล็กเป็นตัวพิมพ์ใหญ่ไม่ได้รับประกันว่าจะลบตัวอักษรซ่อนให้ ควรเช็กซ้ำด้วยตัวนับตัวอักษรทุกครั้ง
ตัวอักษรล่องหนกับภาษาไทย
ภาษาไทยเขียนติดกันโดยไม่เว้นวรรคระหว่างคำ การตัดบรรทัดจึงต้องอาศัยพจนานุกรมของแอปหรือเบราว์เซอร์ ในมาตรฐานการตัดบรรทัดของ Unicode U+200B จัดอยู่ในกลุ่ม ZW ซึ่งหมายถึงจุดที่ตัดบรรทัดได้โดยไม่แสดงช่องว่าง นักพัฒนาเว็บจึงบางครั้งใช้แทรกเพื่อบอกเบราว์เซอร์ว่าตรงนี้ตัดได้ ส่วน U+2060 ทำหน้าที่ตรงข้าม คือห้ามตัดบรรทัดตรงจุดนั้น
ถ้าเขียนหน้าเว็บเอง ไม่ต้องวางตัวอักษรล่องหนลงไปในไฟล์ตรงๆ ให้ใช้รหัส HTML แทน เช่น ​ สำหรับ U+200B เพื่อให้เห็นในโค้ดชัดเจนและตรวจย้อนหลังได้ง่าย
ข้อควรระวังก่อนใช้
- ชื่อล่องหนทำให้คนอื่นหาคุณไม่เจอ: เพื่อนหรือผู้ดูแลระบบอาจค้นชื่อคุณไม่พบ และบางแพลตฟอร์มอาจถือว่าชื่อผิดปกติ
- อย่าใช้เพื่อหลอกลวงหรือเลี่ยงการตรวจสอบ: เช่น ปลอมชื่อให้เหมือนบัญชีอื่น หรือซ่อนข้อความเพื่อเลี่ยงตัวกรอง
- ระวังในช่องรหัสผ่านหรือข้อมูลสำคัญ: ตัวซ่อนทำให้ตรวจทานด้วยสายตาไม่ได้ ผิดพลาดแล้วหาสาเหตุยาก
- มาตรฐานด้านความปลอดภัยของ Unicode ไม่แนะนำให้ใช้ในชื่อระบุตัวตน: UTS #39 จัดอักขระกลุ่ม Default Ignorable เป็นสถานะ Restricted คือไม่ควรใช้ในตัวระบุหรือชื่อผู้ใช้
คำถามที่พบบ่อย
ตัวอักษรล่องหนกับตัวอักษรว่างต่างกันไหม
คนทั่วไปใช้เรียกสลับกัน ในทางเทคนิคช่องว่างจริงอยู่ในกลุ่ม White_Space ส่วนตัวอักษรล่องหนคืออักขระที่ไม่แสดงตัวหนังสือแต่ไม่ได้เป็นช่องว่างตามนิยามนั้น ความต่างนี้คือเหตุผลที่แอปปฏิบัติกับสองกลุ่มไม่เหมือนกัน
ตัวไหนใช้ได้ดีที่สุด
ไม่มีตัวที่ใช้ได้ทุกแอป ให้ลองตามลำดับ U+3164, U+2800, U+200B แล้วดูว่าแอปปลายทางยอมรับตัวไหน
ทำไมวางแล้วแอปบอกว่าชื่อไม่ถูกต้อง
แอปอาจตรวจและปฏิเสธอักขระกลุ่ม Default Ignorable หรือกำหนดให้ชื่อมีตัวอักษรที่มองเห็นอย่างน้อยหนึ่งตัว ลองเปลี่ยนเป็นอักขระอื่น หรือผสมกับตัวอักษรที่มองเห็นได้
ตัวอักษรล่องหนนับเป็นกี่ตัวอักษร
ตัวละ 1 ตัวอักษร แม้มองไม่เห็น เครื่องมือนับตัวอักษรของเว็บนี้ก็นับรวมให้เช่นกัน จึงใช้เช็กได้ว่าข้อความมีตัวซ่อนหรือไม่
ใช้ตัวอักษรล่องหนผิดกฎหมายหรือเปล่า
ตัวอักษรเหล่านี้เป็นอักขระมาตรฐานของ Unicode ที่ใช้ได้ตามปกติ ปัญหาอยู่ที่วิธีใช้ ถ้าใช้เพื่อหลอกลวงหรือฝ่าฝืนเงื่อนไขของแพลตฟอร์ม อาจถูกลบหรือถูกระงับบัญชีได้ ควรอ่านเงื่อนไขของแอปที่ใช้
ค้นเจอตัวอักษรล่องหนในไฟล์ของฉัน ต้องทำยังไง
ถ้ามาจากการคัดลอก ให้พิมพ์คำนั้นใหม่หรือวางผ่านโปรแกรมจดบันทึกแบบข้อความล้วนก่อน แล้วเช็กซ้ำด้วยตัวนับตัวอักษร
สรุป
ตัวอักษรล่องหนคืออักขระ Unicode ที่ไม่แสดงตัวหนังสือแต่นับเป็นตัวอักษรจริง ตัวที่นิยมใช้คือ U+3164 และ U+2800 ซึ่งไม่ถูกตัดทิ้งแบบช่องว่างธรรมดา แต่ผลกับแต่ละแอปไม่เหมือนกันและเปลี่ยนได้ ควรทดลองด้วยตัวเอง และอย่าลืมว่าตัวซ่อนอาจติดมากับข้อความที่คัดลอกมา ถ้าต้องการสัญลักษณ์อื่นๆ ที่มองเห็นได้ ลองใช้เครื่องมือสัญลักษณ์พิเศษที่คัดลอกได้ในคลิกเดียว ทำงานในเบราว์เซอร์ของคุณเอง ฟรี และไม่ต้องอัปโหลดข้อมูลใดๆ
แหล่งอ้างอิง: Unicode Character Database (UnicodeData, PropList.txt, DerivedCoreProperties.txt, LineBreak.txt เวอร์ชัน 18.0.0 จาก unicode.org) สำหรับหมวด คุณสมบัติ White_Space และ Default_Ignorable_Code_Point; UTS #39 Unicode Security Mechanisms (unicode.org/reports/tr39) เรื่องสถานะ Restricted ของอักขระ Default Ignorable; ผลทดสอบ trim() ของ JavaScript และรหัส UTF-8 คำนวณโดยทีมงานเมื่อ 16 ต.ค. 2569