ตัวปรับข้อความให้เป็นมาตรฐาน Unicode

สตริงที่มองเห็นเดียวกันอาจถูกจัดเก็บเป็นลำดับไบต์ที่ต่างกัน ขึ้นอยู่กับว่าเครื่องหมายเน้นเสียงอยู่ในรูปจุดโค้ดเดียว หรือเป็นตัวอักษรบวกกับเครื่องหมายผสม ตัวปรับมาตรฐานนี้จะแปลงข้อความระหว่างรูปแบบการปรับมาตรฐาน Unicode ทั้งสี่ (NFC, NFD, NFKC, NFKD) เพื่อให้สตริงของคุณเปรียบเทียบได้อย่างสะอาดในฐานข้อมูล ดัชนีค้นหา สคริปต์กำจัดข้อมูลซ้ำ และการจับคู่ด้วยนิพจน์ทั่วไป (regex)

วิธีปรับข้อความ Unicode ให้เป็นมาตรฐาน

  1. 1

    วางข้อความที่ป้อน

    วางสตริงลงไป เช่น ตัวอักษรที่มีเครื่องหมายเน้นเสียง ข้อความ CJK ตัวอักษรผสม (ligature) หรืออะไรก็ตามที่รู้สึกว่าไม่สอดคล้องกัน

  2. 2

    เลือกรูปแบบ

    เลือก NFC (แบบประกอบ รูปแบบเว็บที่ใช้ทั่วไป), NFD (แบบแยกส่วน), NFKC (แบบประกอบเชิงความเข้ากันได้) หรือ NFKD (แบบแยกส่วนเชิงความเข้ากันได้)

  3. 3

    เปรียบเทียบตัวเลข

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

  4. 4

    คัดลอกผลลัพธ์ที่ปรับมาตรฐานแล้ว

    ใช้ผลลัพธ์ในฐานข้อมูล เพย์โหลด API ตัวสร้าง slug หรือฟิกซ์เจอร์ทดสอบของคุณ

รูปแบบทั้งสี่และควรใช้แต่ละแบบเมื่อใด

การปรับมาตรฐาน Unicode ถูกกำหนดไว้ในภาคผนวกมาตรฐาน UAX #15 รูปแบบทั้งสี่ต่างกันตามสองแกน คือ แคนอนิคัลเทียบกับความเข้ากันได้ และแบบประกอบเทียบกับแบบแยกส่วน

ตารางอ้างอิงเทียบกัน

รูปแบบ การประกอบ การแมป ควรใช้เมื่อใด
NFC ประกอบ แคนอนิคัลเท่านั้น ค่าเริ่มต้นสำหรับเนื้อหาเว็บ ฐานข้อมูล ชื่อไฟล์
NFD แยกส่วน แคนอนิคัลเท่านั้น การประมวลผลข้อความที่ลบเครื่องหมายเน้นเสียงทีละตัวอักษร
NFKC ประกอบ รวมความเข้ากันได้ การค้นหา ตัวระบุ ตัวกรองสแปม การพับเพื่อแสดงผล
NFKD แยกส่วน รวมความเข้ากันได้ การปรับมาตรฐานเชิงรุกก่อนลบเครื่องหมายกำกับเสียง

รูปแบบแคนอนิคัลรักษาความหมายไว้

พิมพ์ é แล้วสลับรูปแบบดู NFC จะรายงาน 1 ตัวอักษรและ 2 ไบต์ (จุดโค้ดเดียว U+00E9) ขณะที่ NFD รายงาน 2 ตัวอักษรและ 3 ไบต์ (e ธรรมดา ตามด้วยเครื่องหมายเน้นเสียงเฉียบพลันแบบผสม U+0301) ทั้งสองดูเหมือนกันบนหน้าจอแต่เป็นลำดับไบต์ที่ต่างกัน และความไม่ตรงกันนี้เองคือสิ่งที่การปรับมาตรฐานแก้ไข รูปแบบแคนอนิคัลเพียงจัดเรียงไบต์ใหม่ ดังนั้น é ในรูปแบบใดก็ตามจะหมายถึงตัวอักษร e ที่มีเครื่องหมายเน้นเสียงเฉียบพลันเสมอ

“ความเข้ากันได้” เปลี่ยนอะไรจริง ๆ

รูปแบบ K (NFKC, NFKD) ยังเขียนตัวอักษรที่ดูเกี่ยวข้องกันแต่มีรูปแบบการจัดหน้าต่างกันใหม่ด้วย นี่เป็นการแปลงที่สูญเสียข้อมูล คุณไม่สามารถกู้ต้นฉบับกลับมาได้ ตัวอย่างเช่น:

  • fi (U+FB01 ลิเกเจอร์ตัวเล็กแบบละติน fi) กลายเป็น fi (สองตัวอักษร)
  • ① (U+2460 เลขหนึ่งในวงกลม) กลายเป็น 1
  • ㌀ (U+3300 ช่องสี่เหลี่ยม CJK “apaato”) กลายเป็น アパート
  • A แบบเต็มความกว้าง (U+FF21) กลายเป็น A

วิธีนี้ทรงพลังสำหรับการค้นหาและกำจัดข้อมูลซ้ำ แต่ทำลายการจัดรูปแบบ ดังนั้นจงใช้รูปแบบ K เฉพาะเมื่อความเที่ยงตรงทางสายตาไม่สำคัญ

กฎที่ใช้ได้จริง

  • จัดเก็บเนื้อหาของผู้ใช้ในรูปแบบ NFC
  • เปรียบเทียบตัวระบุในรูปแบบ NFC เพื่อให้ café ที่เขียนเป็นจุดโค้ดเดียว และ café ที่เขียนเป็น e + U+0301 ตรงกัน แล้วยกระดับเป็น NFKC เมื่อคุณต้องการให้ fi กับ fi หรือ A แบบเต็มความกว้างกับ A ถูกเปรียบเทียบว่าเท่ากันด้วย ดังที่กฎตัวระบุใน UAX #31 ทำ
  • สร้าง slug ที่ไม่มีเครื่องหมายเน้นเสียงโดยปรับมาตรฐานเป็น NFD แล้วลบบล็อกเครื่องหมายผสม U+0300 ถึง U+036F

คำถามที่พบบ่อย

โดยทั่วไปหมายความว่าข้อความที่คุณป้อนอยู่ในรูปแบบเป้าหมายอยู่แล้ว ลองวางข้อความที่ผสมหลายแหล่ง (ชื่อไฟล์บน Mac ส่วนของ PDF ที่คัดลอกมา หรือแถวจากฐานข้อมูลเก่า) แล้วคุณจะมีโอกาสเห็นจำนวนตัวอักษรและไบต์เปลี่ยนไปมากกว่ามาก

สำหรับ URL ที่แสดงผล ใช้ NFC ส่วน slug ที่ต้องการ ASCII ล้วน ให้ปรับมาตรฐานเป็น NFD ลบเครื่องหมายผสมด้วย regex บนช่วง U+0300 ถึง U+036F แล้วแปลงเป็นตัวพิมพ์เล็ก NFKD เป็นทางเลือกเมื่อคุณต้องการพับลิเกเจอร์และเลขในวงกลมด้วย

รูปแบบแคนอนิคัล (NFC, NFD) ไม่เคยเปลี่ยนความหมาย เพียงจัดเรียงไบต์ใหม่ ส่วนรูปแบบความเข้ากันได้ (NFKC, NFKD) เปลี่ยนความหมายจริง ลิเกเจอร์ถูกแยก ตัวอักษรแบบเต็มความกว้างถูกพับ และตัวยกถูกทำให้แบน ใช้เมื่อคุณต้องการผลเช่นนั้นเท่านั้น

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

เครื่องมือที่เกี่ยวข้อง

เครื่องแปลงตัวเลขเป็นคำไทย

เขียนจำนวนไม่เกิน 18 หลักเป็นคำไทย หรือเขียนจำนวนบาทและสตางค์ตามค่าที่กรอกในเบราว์เซอร์ รองรับเลขอารบิกกับเลขไทยและไม่ปัดค่า

เครื่องมือสร้างตัวอักษรวงกลม

แปลงข้อความธรรมดาให้เป็นตัวอักษรวงกลม (Ⓐ Ⓑ Ⓒ) ที่คัดลอกแล้ววางลงในไบโอ Instagram, TikTok และ Discord ได้ มีทั้งตัวพิมพ์ใหญ่และตัวพิมพ์เล็กในวงกลม พร้อมตัวเลขในวงกลม โดยไม่ต้องใช้แอป

เครื่องสร้างชื่ออิตาลีแบบสุ่ม

จับคู่หนึ่งใน 40 ชื่ออิตาลีกับหนึ่งใน 40 นามสกุล ผลอาจซ้ำและไม่มีตัวกรองเพศหรือภูมิภาค

เครื่องสุ่มนามสกุลญี่ปุ่น

เลือกนามสกุลญี่ปุ่นแบบโรมาจิ 1–60 รายการโดยไม่ซ้ำในชุดเดียว จากรายการคงที่ 60 รายการ

สัญลักษณ์ลูกศรสำหรับคัดลอก

คัดลอกลูกศร Unicode ที่ใช้บ่อยได้ในคลิกเดียว ทั้งแบบตรง สองเส้น ทแยง มีขอ วงกลม และสามเหลี่ยม สำหรับเอกสาร แชต และงานออกแบบ

เครื่องสุ่มชื่อจีน

สร้างชื่อ 1–50 ชื่อจากรายการ ASCII แบบตายตัว ผลลัพธ์ไม่มีอักษรจีน เครื่องหมายเสียง ความหมาย หรือตัวกรองรูปแบบ

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