Tiếng Việt là ví dụ rõ nhất về việc chuyển sang slug có thể xóa sạch ý nghĩa: âm tiết "ma" mang sáu thanh điệu khác nhau — ma (con ma), má (mẹ, hoặc má mặt), mà (liên từ "nhưng"), mả (ngôi mộ), mã (mã số, con ngựa), mạ (mạ non) — sáu từ, sáu nghĩa hoàn toàn khác nhau. Khi slugify bỏ hết dấu thanh, tất cả sáu từ này đều trở thành cùng một chuỗi ma, và thông tin để phân biệt chúng biến mất vĩnh viễn.
Chuyển đổi slug làm gì
- Chuyển tất cả chữ cái thành chữ thường.
- Thay khoảng trắng và dấu câu bằng dấu gạch ngang.
- Loại bỏ hoàn toàn dấu thanh và dấu phụ của tiếng Việt (sắc, huyền, hỏi, ngã, nặng), giữ lại chữ cái gốc.
- Rút gọn các dấu gạch ngang lặp lại và cắt bỏ dấu gạch ngang ở đầu và cuối.
Ví dụ, tiêu đề "Xin chào, Thế giới! Bạn khỏe không?" trở thành thứ gì đó như xin-chao-the-gioi-ban-khoe-khong.
Vì sao chỉ URL-encode đơn thuần là chưa đủ
Percent-encoding (ví dụ %C3%A0 cho chữ có dấu huyền) hợp lệ về mặt kỹ thuật trong URL, nhưng con người không đọc được và trông không đáng tin cậy trên thanh địa chỉ hoặc khi chia sẻ liên kết. Một slug giải quyết đúng vấn đề khả năng đọc, chứ không chỉ tính hợp lệ về kỹ thuật.
Vì sao cần đến điều này
- Tự động tạo URL của bài viết blog tiếng Việt từ tiêu đề của nó.
- Tạo một mã định danh dễ đọc từ tên sản phẩm cho một cửa hàng trực tuyến.
- Tạo tên tệp hoặc class CSS từ một văn bản bất kỳ, tránh các ký tự không được phép.
Xung đột: khi các tiêu đề khác nhau cho ra cùng một slug
Các tiêu đề "Xin chào, thế giới!" và "xin chào thế giới" sau khi chuẩn hóa (chữ thường, loại bỏ dấu câu) sẽ chuyển thành cùng một slug xin-chao-the-gioi, dù văn bản gốc khác nhau. Nếu slug được dùng làm định danh duy nhất (ví dụ trong URL của bài viết), xung đột như vậy cần được xử lý thêm — thường bằng cách thêm hậu tố số hoặc ID vào bản trùng.