บทความทั้งหมด

Slugify: หัวข้อกลายเป็น URL ที่ใช้งานได้อย่างไร

ภาษาไทยเผชิญปัญหาสองชั้นเมื่อต้องแปลงเป็น slug ปัญหาแรกคือไม่มีมาตรฐานการทับศัพท์ไทยเป็นอักษรโรมันที่ใช้กันแพร่หลายจริง ๆ (มีมาตรฐานทางการของราชบัณฑิตยสภาอยู่ แต่ไม่ตรงกับที่คนทั่วไปสะกดกันบนอินเทอร์เน็ต) ส่วนปัญหาที่สองคือภาษาไทยเขียนติดกันไม่มีเว้นวรรคระหว่างคำ ดังนั้นก่อนจะแปลงข้อความเป็น slug ที่มีขีดกลางคั่นคำ ระบบต้องแบ่งคำให้ถูกต้องเสียก่อน ซึ่งเป็นงานที่ซับซ้อนกว่าการแค่แทนที่อักขระเสียอีก

การแปลง Slug ทำอะไรบ้าง

  • แปลงตัวอักษรทั้งหมดเป็นตัวพิมพ์เล็ก
  • แทนที่ช่องว่างและเครื่องหมายวรรคตอนด้วยขีดกลาง
  • ทับศัพท์อักษรไทยเป็นอักษรละตินแบบง่าย หรือลบอักขระที่ไม่รองรับ
  • ย่อขีดกลางที่ซ้ำกันและลบขีดกลางที่จุดเริ่มต้นและจุดสิ้นสุด

ตัวอย่างเช่น หัวข้อ "สวัสดี โลก! เป็นอย่างไรบ้าง?" จะกลายเป็นบางอย่างเช่น sawatdee-lok-pen-yangrai-bang

ทำไมการเข้ารหัส URL ทั่วไปไม่เพียงพอ

Percent-encoding (เช่น %E0%B8%AA สำหรับอักษรไทย) ถูกต้องทางเทคนิคใน URL แต่มนุษย์อ่านไม่ได้และดูไม่น่าเชื่อถือในแถบที่อยู่หรือเมื่อแชร์ลิงก์ Slug แก้ปัญหาความอ่านง่ายนี้ ไม่ใช่แค่ความถูกต้องทางเทคนิค

ทำไมต้องใช้สิ่งนี้

  • สร้าง URL ของบทความบล็อกภาษาไทยโดยอัตโนมัติจากหัวข้อ
  • สร้างตัวระบุที่อ่านง่ายจากชื่อสินค้าสำหรับร้านค้าออนไลน์
  • สร้างชื่อไฟล์หรือคลาส CSS จากข้อความใด ๆ โดยหลีกเลี่ยงอักขระที่ไม่อนุญาต

การชนกัน: เมื่อหัวข้อต่างกันให้ slug เดียวกัน

หัวข้อ "สวัสดี โลก!" และ "สวัสดี โลก" หลังการปรับให้เป็นมาตรฐาน (แปลงเป็นตัวพิมพ์เล็ก ลบเครื่องหมายวรรคตอน) จะกลายเป็น slug เดียวกันคือ sawatdee-lok แม้ข้อความต้นฉบับจะต่างกัน หากใช้ slug เป็นตัวระบุที่ไม่ซ้ำกัน (เช่น ใน URL ของบทความ) การชนกันแบบนี้ต้องได้รับการจัดการเพิ่มเติม โดยทั่วไปคือการเติมส่วนต่อท้ายเป็นตัวเลขหรือ ID ให้กับรายการที่ซ้ำ

ลองใช้เครื่องมือ