เครื่องตรวจจับตัวอักษรที่มองไม่เห็น

เมื่อคุณวางข้อความใดๆ เข้าไป ระบบตรวจจับจะรายงานตัวอักษรที่มองไม่เห็นทั้งหมดที่มีอยู่ในข้อความ ได้แก่ ช่องว่างความกว้างศูนย์ เครื่องหมายทิศทาง รหัส BOM เครื่องหมายเส้นสายหย่อนอ่อน ช่องว่างที่ไม่ตัดข้อความ และกลุ่มรหัสควบคุมของ Unicode ที่ดูเหมือนอากาศเปล่าแต่สามารถขัดขวางการค้นหา การแยกตัวอักษร และการคัดลอก-วางได้ ผลการตรวจพบแต่ละรายการจะมาพร้อมกับรหัสเฉพาะ (U+200B) ชื่ออย่างเป็นทางการของ Unicode และตำแหน่งในสตริง เพื่อให้คุณสามารถระบุตำแหน่งของบั๊กที่ไม่ทราบสาเหตุได้อย่างแม่นยำ ก่อนดำเนินการแก้ไข

วิธีการตรวจจับตัวอักษรที่มองไม่เห็น

  1. 1

    วางข้อความ

    ใส่ข้อมูลที่น่าสงสัยเข้าไป, เช่น ชิ้นส่วนโค้ด ข้อความที่คัดลอกมา หรือค่าการตั้งค่า

  2. 2

    เริ่มการสแกน

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

  3. 3

    ตรวจสอบรายงาน

    แต่ละผลลัพธ์จะแสดงตำแหน่งของมัน (เริ่มนับจาก 1) รหัสในรูปแบบ `U+HHHH` และชื่อในระบบยูนิโค้ด (เช่น ช่องว่างความกว้างศูนย์, BOM ฯลฯ)

  4. 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+2066U+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

เครื่องมือนี้มีให้บริการในภาษาอื่น