เครื่องตรวจจับตัวอักษรที่มองไม่เห็น
เมื่อคุณวางข้อความใดๆ เข้าไป ระบบตรวจจับจะรายงานตัวอักษรที่มองไม่เห็นทั้งหมดที่มีอยู่ในข้อความ ได้แก่ ช่องว่างความกว้างศูนย์ เครื่องหมายทิศทาง รหัส BOM เครื่องหมายเส้นสายหย่อนอ่อน ช่องว่างที่ไม่ตัดข้อความ และกลุ่มรหัสควบคุมของ Unicode ที่ดูเหมือนอากาศเปล่าแต่สามารถขัดขวางการค้นหา การแยกตัวอักษร และการคัดลอก-วางได้ ผลการตรวจพบแต่ละรายการจะมาพร้อมกับรหัสเฉพาะ (U+200B) ชื่ออย่างเป็นทางการของ Unicode และตำแหน่งในสตริง เพื่อให้คุณสามารถระบุตำแหน่งของบั๊กที่ไม่ทราบสาเหตุได้อย่างแม่นยำ ก่อนดำเนินการแก้ไข
วิธีการตรวจจับตัวอักษรที่มองไม่เห็น
-
1
วางข้อความ
ใส่ข้อมูลที่น่าสงสัยเข้าไป, เช่น ชิ้นส่วนโค้ด ข้อความที่คัดลอกมา หรือค่าการตั้งค่า
-
2
เริ่มการสแกน
เครื่องมือนี้จะตรวจสอบแต่ละตำแหน่งของโค้ด และแสดงสัญลักษณ์สำหรับตำแหน่งใดก็ตามที่ตรงกับรายการตัวอักษรแบบมองไม่เห็นหรือรูปแบบเฉพาะ
-
3
ตรวจสอบรายงาน
แต่ละผลลัพธ์จะแสดงตำแหน่งของมัน (เริ่มนับจาก 1) รหัสในรูปแบบ `U+HHHH` และชื่อในระบบยูนิโค้ด (เช่น ช่องว่างความกว้างศูนย์, BOM ฯลฯ)
-
4
ทำความสะอาดข้อความ
ใช้คำสั่งแทนที่เพื่อลบหรือแสดงตัวอักษรที่ซ่อนอยู่ จากนั้นนำข้อมูลที่ผ่านการปรับแต่งแล้วไปวางกลับเข้าไป
ตัวอักษรที่มองไม่เห็น และแหล่งที่มาของพวกมัน
ตัวอักษรเหล่านี้มีอยู่ด้วยเหตุผลที่ชอบธรรม เช่น การจัดวางข้อความ ทิศทางของอักษร หรือการรวมตัวอักษรเข้าด้วยกัน แต่จะกลายเป็นปัญหาเมื่อตัวอักษรเหล่านี้ถูกนำมาใช้ในบริบทที่ไม่เหมาะสม เช่น ในโค้ด ไฟล์กำหนดค่า คำสั่งค้นหา หรือชื่อผู้ใช้
อักขระที่เครื่องตรวจจับค้นหา
| โค้ดพอยต์ | ชื่อ | สถานที่ที่มักปรากฏโดยไม่ได้ตั้งใจ |
|---|---|---|
U+200B |
ช่องว่างความกว้างศูนย์ | เครื่องมือแก้ไขข้อความแบบรีชเท็กซ์ และโปรแกรมประมวลผลคำ |
U+200C |
ตัวอักษรที่ไม่มีความกว้างและไม่ใช่ตัวเชื่อม | แบบพิมพ์ภาษาเปอร์เซียและฮินดี |
U+200D |
เครื่องเชื่อมแบบความกว้างศูนย์ | ลำดับอีโมจิ และตัวอักษรอินดิก |
U+200E |
ลวดลายแสดงทิศทางจากซ้ายไปขวา | ข้อความที่มีทั้งรูปแบบการเขียน LTR และ RTL |
U+200F |
ลวดลายจากขวาไปซ้าย | เหมือนกัน |
U+202A..E |
การฝังหรือการเปลี่ยนแปลงค่าเดิม | เหมือนกัน; บางครั้งถูกใช้ในทางชั่วร้าย (ทรอยัน) |
U+2028 |
ตัวแบ่งบรรทัด | คัดลอกมาจาก Word อาจทำให้ระบบเข้ารหัส JSON ทำงานผิดพลาด |
U+2029 |
ตัวแบ่งย่อหน้า | เหมือนกัน |
U+FEFF |
ตัวบ่งชี้ลำดับไบต์ | ไฟล์ถูกบันทึกในรูปแบบ UTF-8 กับ BOM ในโปรแกรม Notepad |
U+00A0 |
ช่องว่างแบบไม่ขาดสาย | ช่องว่างทางพิมพ์จาก Word |
U+00AD |
เครื่องหมายไฮเฟนแบบนุ่ม | คำแนะนำการใช้เครื่องหมายไฮเฟนในข้อความแบบรีชเท็กซ์ |
อาการทั่วไปของข้อผิดพลาดเกี่ยวกับตัวอักษรที่ซ่อนอยู่
- การเปรียบเทียบสตริงที่ควรจะเท่ากันนั้น จริงๆ แล้วไม่เท่ากัน ให้นำค่าต่างๆ ไปใส่ในเครื่องมือนี้ แล้วตรวจสอบจำนวนไบต์
- รูปแบบคำสั่ง regex ที่ดูเหมือนจะตรงกันเมื่อดูด้วยตา แต่กลับไม่สามารถใช้งานได้ในโค้ด โดยทั่วไปมักเป็นตัวอักษร
U+00A0ที่แฝงตัวมาแทนเครื่องหมายช่องว่าง - ตัวแยกข้อมูล JSON ล่มเมื่อใช้ข้อมูลที่วางไว้ (payload) โดยปกติจะเกิดขึ้นกับ BOM ที่อยู่ตอนต้นของข้อมูล หรือค่า
U+2028ในรูปแบบสตริงที่ JavaScript ปฏิเสธไม่รับในรูปแบบ JSON - ชื่อเรื่องใน SEO มีความยาวไม่ถูกต้อง พื้นที่ว่างแบบ Zero-width Space จะทำให้ความยาวเกินขีดจำกัดโดยไม่มีผลเปลี่ยนแปลงที่มองเห็นได้
มุมมองด้านการโจมตีแบบ Trojan Source
ตัวอักษรสำหรับการแทนที่แบบสองทิศทาง (U+202E, U+2066… U+2069) สามารถทำให้โค้ดต้นฉบับแสดงผลตามลำดับหนึ่ง แต่กลับถูกคอมไพล์ตามลำดับอื่น ซึ่งเป็นประเภทของการโจมตีที่เรียกว่า “การโจมตีแบบโทรยาน” หากคุณตรวจสอบโค้ดจากผู้พัฒนาที่ไม่น่าเชื่อถือ ควรนำไฟล์ความแตกต่าง (diff files) ของพวกเขาไปผ่านเครื่องตรวจจับนี้ก่อนทำการรวมโค้ด
คำถามที่พบบ่อย
โปรแกรม Notepad และเครื่องมือ Windows เวอร์ชันเก่าบางตัวจะใช้รูปแบบข้อมูลเริ่มต้นคือ “UTF-8 พร้อม BOM” โดยไฟล์ BOM (U+FEFF) นั้นสามารถใช้งานได้ดีกับแอปพลิเคชันบน Windows แต่อาจทำให้ระบบประมวลผลต่าง ๆ เช่น ไฟล์ PHP (ซึ่งไฟล์ BOM จะถูกแสดงเป็นผลลัพธ์ก่อนแท็ก <?php) และตัวแปลงข้อมูล JSON ทำงานผิดปกติ
มันดูเหมือนช่องว่างธรรมดาบนหน้าจอ แต่มีพฤติกรรมที่แตกต่างออกไป โดยไม่อนุญาตให้มีการแยกบรรทัด และไม่สอดคล้องกับรูปแบบของคำสั่ง regex สำหรับ \s ในภาษาส่วนใหญ่ จึงมักปรากฏอยู่ภายในเส้นทางไฟล์ ที่อยู่อีเมล และชื่อผู้ใช้ที่คัดลอกมาจากแหล่งข้อมูลประเภท rich-text
ไม่ใช่ในทุกกรณี ในข้อความภาษาอาหรับ ภาษาเปอร์เซีย หรือภาษาเดวานาการี การใช้ตัวเชื่อมแบบความกว้างศูนย์ (zero-width joiner) และตัวไม่เชื่อม (non-joiner) เป็นสิ่งจำเป็นทางด้านความหมาย สำหรับโค้ด ไฟล์กำหนดค่า และข้อความภาษาอังกฤษส่วนใหญ่ สามารถตัดส่วนเหล่านี้ออกได้อย่างอิสระ แต่สำหรับเนื้อหาภาษาธรรมชาติ ควรใช้เครื่องมือตรวจจับเพื่อตรวจสอบก่อนที่จะดำเนินการตัด
ไม่, การวิเคราะห์จะดำเนินการเฉพาะสำหรับคำขอในขณะนี้เท่านั้น และข้อมูลที่คุณป้อนจะไม่ถูกเก็บรักษาหรือบันทึกหลังจากที่ได้รับคำตอบแล้ว
เครื่องมือที่เกี่ยวข้อง
สัญลักษณ์น้อยกว่าหรือเท่ากับ
คัดลอกสัญลักษณ์ ≤ และสัญลักษณ์เปรียบเทียบทางคณิตศาสตร์ที่เกี่ยวข้อง รวมถึง Unicode เอนทิตี HTML และการเขียน LaTeX สำหรับสเปรดชีต งานวิจัย และหน้าเว็บ
สัญลักษณ์ลูกศรสำหรับคัดลอก
คัดลอกลูกศร Unicode ที่ใช้บ่อยได้ในคลิกเดียว ทั้งแบบตรง สองเส้น ทแยง มีขอ วงกลม และสามเหลี่ยม สำหรับเอกสาร แชต และงานออกแบบ
เครื่องแปลงตัวเลขเป็นคำไทย
เขียนจำนวนไม่เกิน 18 หลักเป็นคำไทย หรือเขียนจำนวนบาทและสตางค์ตามค่าที่กรอกในเบราว์เซอร์ รองรับเลขอารบิกกับเลขไทยและไม่ปัดค่า
เครื่องแปลงข้อความที่เหมาะกับผู้มีภาวะดิสเล็กเซีย
จัดเรียงข้อความที่วางใหม่เป็นย่อหน้าสั้นๆ และบรรทัดยาวประมาณ 72 ตัวอักษรเพื่อให้อ่านง่ายขึ้น คัดลอกผลลัพธ์ไปวางในเอกสาร อีเมล หรือโปรแกรมแก้ไขใดก็ได้
ตัวสร้างข้อความกลิตช์
สร้างข้อความกลิตช์สไตล์ Zalgo ด้วยเครื่องหมายประกอบ Unicode เลือกระดับความเข้ม ดูรูปแบบต่าง ๆ แล้วคัดลอกข้อความที่ดูเสียหายสำหรับโปรไฟล์ มีม หรือโพสต์สยองขวัญ
เครื่องนับคำ
นับคำ ตัวอักษร ประโยค และย่อหน้า พร้อมเวลาในการอ่าน เวลาในการพูด ความหนาแน่นของคีย์เวิร์ด และคะแนนความอ่านง่าย Flesch สำหรับเรียงความ โพสต์ แคปชัน และ meta description
เครื่องมือนี้มีให้บริการในภาษาอื่น
- Detektor niewidzialnych znaków [PL]
- أداة كشف الأحرف غير المرئية [AR]
- Unsichtbarer Zeichendetektor [DE]
- Détecteur de caractères invisibles [FR]
- Bộ phát hiện ký tự vô hình [VI]
- Detector de Caracteres Invisíveis [PT]
- Detektor för osynliga tecken [SV]
- 不可視文字検出器 [JA]
- Detektor Karakter Tak Terlihat [ID]
- 보이지 않는 문자 탐지기 [KO]
- Detector de Caracteres Invisibles [ES]
- Onzichtbare karakter detector [NL]
- 不可见字符检测器 [ZH]
- Invisible Character Detector [EN]
- Rilevatore di Caratteri Invisibili [IT]
- Обнаружитель невидимых символов [RU]
- Görünmez Karakter Tespit Cihazı [TR]