แปลงข้อความเป็น Slug (URL)

เครื่องมือแปลงข้อความเป็น Slug มืออาชีพ แปลงข้อความให้เป็น Slug ที่เข้ากับ URL ได้ รองรับการแปลงเป็นตัวพิมพ์เลือก แยกด้วยเครื่องหมายที่กำหนดเอง และลบคำทั่วไปภาษาอังกฤษที่ไม่มีผลต่อความหมาย ใช้การแปลงมาตรฐาน Unicode เพื่อจัดการอักขระจากหลายภาษา ทำให้ Slug ที่สร้างขึ้นเป็นไปตามแนวทาง SEO ที่ดีที่สุด เหมาะสำหรับ URL บล็อก การตั้งชื่อไฟล์ ตัวระบุฐานข้อมูล และกรณีอื่น ๆ ประมวลผลในเครื่องทั้งหมดเพื่อปกป้องความเป็นส่วนตัว ไม่ต้องลงทะเบียน ให้คำแนะนำการใช้งานโดยละเอียดและข้อแนะนำที่ดีที่สุดเพื่อช่วยคุณสร้าง Slug คุณภาพสูง

พารามิเตอร์และข้อความป้อน

แนะนำ: ใช้ - หรือ _, ความยาว 1~3 ตัวอักษร

ผลลัพธ์

ทำไมต้องใช้ Slugify?

🔍 การปรับประสิทธิภาพ SEO

คำหลักใน URL ช่วยให้เครื่องมือค้นหาเข้าใจเนื้อหาของหน้าเว็บและปรับปรุงอันดับการจัดอันดับ ตัวอย่างเช่น example.com/blog/how-to-learn-javascript มีประสิทธิภาพมากกว่า example.com/blog/123

👁️ ความอ่านง่ายและการแชร์

ผู้ใช้สามารถเข้าใจเนื้อหาจาก URL ได้ทันที สลักจะแชร์ได้ง่ายขึ้นบนโซเชียลมีเดีย และจดจำหรือพิมพ์ด้วยตนเองได้ง่ายกว่า

💻 ความเข้ากันได้ของระบบ

หลีกเลี่ยงข้อผิดพลาดที่เกิดจากอักขระพิเศษในชื่อไฟล์หรือ URL รับประกันความเข้ากันได้ข้ามแพลตฟอร์ม (Windows/Linux/macOS) และป้องกันปัญหาการเข้ารหัส

🗄️ เป็นมิตรกับฐานข้อมูล

ใช้เป็นตัวระบุที่ไม่ซ้ำกัน (เช่น ชื่อผู้ใช้ แท็ก) เพื่อลดความเสี่ยงของ SQL injection และปรับปรุงประสิทธิภาพการจัดทำดัชนีและการสืบค้น

Slugify คืออะไร?

Slug คือข้อความที่สั้นและมีมาตรฐาน ซึ่งใช้เป็น URL, ชื่อไฟล์ หรือตัวระบุ การประมวลผลทั่วไป ได้แก่ การทำให้กรณีตัวอักษรเป็นมาตรฐาน ลบเครื่องหมายวรรคตอน และเชื่อมคำด้วยเครื่องหมายแยก

  • จัดลำดับความสำคัญ ASCII: ลบสำเนียงและสัญลักษณ์ เก็บเฉพาะอักขระที่เป็นตัวอักษรและตัวเลข รวมถึงช่องว่าง
  • รองรับ Unicode: แปลงมาตรฐานอักขระจากหลายภาษาโดยใช้ NFKD ก่อนประมวลผล
  • ปลอดภัยสำหรับ URL: ผลลัพธ์มีเฉพาะตัวอักษร ตัวเลข และเครื่องหมายแยก พร้อมใช้งานได้โดยตรงในพาธ

กรณีการใช้งาน

URL ของโพสต์บล็อก

How to Learn JavaScript?

how-to-learn-javascript

การตั้งชื่อไฟล์

Product Requirements Document v2.0.docx

product-requirements-v2-0.docx

ตัวระบุฐานข้อมูล

用户-张三

user-zhang-san

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

Q: จัดการอักขระภาษาจีนอย่างไร?

A: โดยค่าเริ่มต้น จะลบเครื่องหมายเน้นเสียงและเก็บอักษรพินอินไว้ ข้อความภาษาจีนล้วนอาจว่างเปล่า แนะนำให้แปลงเป็นพินอินด้วยตนเองก่อนใช้ slugification หรือใช้เครื่องมือแปลงพินอินภาษาจีน

Q: ทำไมผลลัพธ์ของฉันว่างเปล่า?

A: อินพุตของคุณอาจประกอบด้วยเครื่องหมายวรรคตอน สัญลักษณ์ หรือเว้นวรรคทั้งหมด หรือคำทั้งหมดถูกลบโดยการกรองคำหยุด ลองปิดตัวเลือกคำหยุดหรือปรับอินพุตของคุณ

Q: ควรใช้ - หรือ _ เป็นตัวคั่น?

A: สำหรับ SEO ใช้ - (ยัติภังค์) เพราะ Google ถือว่าเป็นเว้นวรรค ส่วน _ (ขีดล่าง) ถือว่าเป็นสัญลักษณ์เชื่อมต่อ ซึ่งขัดขวางการแยกคำ สำหรับชื่อไฟล์ ทั้งสองอย่างก็ได้

Q: มีขีดจำกัดความยาวสำหรับสลักหรือไม่?

A: ไม่มีขีดจำกัดทางเทคนิค แต่แนะนำให้เก็บสลักไว้ไม่เกิน 50 อักขระ เพื่อการแสดงผล URL และ SEO ที่ดีขึ้น สลักที่ยาวเกินไปอาจถูกเครื่องมือค้นหาตัดทิ้ง

แนวทางปฏิบัติที่ดีที่สุด

แนวทางปฏิบัติที่แนะนำ

  • ✓ ทำให้สั้น (แนะนำน้อยกว่า 50 อักขระ)
  • ✓ หลีกเลี่ยงอักขระพิเศษ ใช้เฉพาะตัวอักษร ตัวเลข และตัวคั่นเท่านั้น
  • ✓ ใช้ตัวพิมพ์เล็กเพื่อปัญหาเรื่องความแตกต่างของตัวพิมพ์
  • ✓ ลบ stopwords เพื่อเพิ่มความหนาแน่นของความหมาย

ปฏิบัติที่ควรหลีกเลี่ยง

  • ✗ อย่าใส่ข้อมูลที่ละเอียดอ่อน (เช่น ID, อีเมล, รหัสผ่าน)
  • ✗ อย่าใช้อักขระพิเศษ (เช่น @#$%^&*)
  • ✗ อย่าเว้นวรรคหรือตัวคั่นที่ต่อเนื่องกัน
  • ✗ อย่าใช้คำเดียวกันซ้ำ

รายละเอียดทางเทคนิค

การทำให้เป็นรูปแบบมาตรฐาน Unicode:

ใช้การแยกตัวประกอบ NFKD + การลบเครื่องประสมการเน้นเสียง (\p{M}) แปลง Café เป็น Cafe รองรับอักขระส่วนใหญ่ที่อิงภาษาละติน

รายการ Stopwords:

อ้างอิงจากคำภาษาอังกฤษที่ใช้บ่อย (a/an/the/and/or/of/to/in/on/for/at/by/with); สามารถปรับแต่งได้ Stopwords ภาษาจีนต้องจัดการแยกต่างหาก

ความเข้ากันได้กับเบราว์เซอร์:

ต้องใช้ ES6+ และการรองรับ regex Unicode (\p{...}) รองรับในเบราว์เซอร์สมัยใหม่: Chrome 64+, Firefox 78+, Safari 11.1+

วิธีสร้าง Slug ผ่านภาษาโปรแกรมมิ่ง?

JavaScript

function slugify(text) {
  return text
    .toLowerCase()
    .normalize("NFKD")
    .replace(/[\u0300-\u036f]/g, "")
    .replace(/[^\w\s-]/g, "")
    .trim()
    .replace(/[\s_-]+/g, "-")
    .replace(/^-+|-+$/g, "");
}

PHP

function slugify($text) {
  $text = mb_strtolower($text);
  $text = iconv("UTF-8", "ASCII//TRANSLIT", $text);
  $text = preg_replace("/[^\w\s-]/", "", $text);
  $text = preg_replace("/[\s_-]+/", "-", $text);
  return trim($text, "-");
}

Python

import re
import unicodedata

def slugify(text):
    text = text.lower()
    text = unicodedata.normalize("NFKD", text)
    text = text.encode("ascii", "ignore").decode("ascii")
    text = re.sub(r"[^\w\s-]", "", text)
    text = re.sub(r"[\s_-]+", "-", text)
    return text.strip("-")

Go

import (
    "regexp"
    "strings"
    "golang.org/x/text/unicode/norm"
)

func Slugify(text string) string {
    text = strings.ToLower(text)
    text = norm.NFKD.String(text)
    re := regexp.MustCompile(`[^\w\s-]`)
    text = re.ReplaceAllString(text, "")
    re = regexp.MustCompile(`[\s_-]+`)
    text = re.ReplaceAllString(text, "-")
    return strings.Trim(text, "-")
}

Ruby

require "unicode"

def slugify(text)
  text = text.downcase
  text = Unicode.nfkd(text).gsub(/[^\x00-\x7F]/, "")
  text = text.gsub(/[^\w\s-]/, "")
  text = text.gsub(/[\s_-]+/, "-")
  text.strip.gsub(/^-+|-+$/, "")
end

Java

import java.text.Normalizer;

public static String slugify(String text) {
    text = text.toLowerCase();
    text = Normalizer.normalize(text, Normalizer.Form.NFKD);
    text = text.replaceAll("[^\\w\\s-]", "");
    text = text.replaceAll("[\\s_-]+", "-");
    return text.replaceAll("^-+|-+$", "");
}