Polski alfabet ma dziewięć liter z własnymi znakami diakrytycznymi (ą, ć, ę, ł, ń, ó, ś, ź, ż), z których każda niesie osobną wartość fonetyczną. Slug zwykle sprowadza je do najbliższego odpowiednika bez ogonka czy kreski — ł staje się l, ż i ź stają się nierozróżnialnym z, co w praktyce oznacza, że słowa takie jak „żyto” i „zyto” (nieistniejące, ale technicznie różne od „żyto” bez ogonka) po normalizacji stają się nie do odróżnienia.
Co robi konwersja na slug
- Zamienia wszystkie litery na małe.
- Zamienia spacje i znaki interpunkcyjne na myślniki.
- Transliteruje polskie znaki diakrytyczne do najbliższego odpowiednika łacińskiego lub usuwa inne znaki spoza podstawowej łaciny.
- Zwija powtarzające się myślniki i usuwa myślniki na początku i końcu ciągu.
Na przykład tytuł „Witaj, Świecie! Jak się masz?" zamienia się w coś w rodzaju witaj-swiecie-jak-sie-masz.
Dlaczego zwykłe URL-encode nie wystarcza
Percent-encoding (np. %C4%99 dla „ę") jest technicznie poprawny w URL, ale nieczytelny dla człowieka i wygląda niewiarygodnie w pasku adresu lub przy udostępnianiu linku. Slug rozwiązuje właśnie problem czytelności, nie tylko technicznej poprawności.
Do czego się przydaje
- Automatyczne generowanie adresu URL polskiego wpisu na blogu z jego tytułu.
- Tworzenie czytelnego identyfikatora z nazwy produktu dla sklepu internetowego.
- Formowanie nazwy pliku lub klasy CSS z dowolnego tekstu, unikając niedozwolonych znaków.
Kolizje: gdy różne tytuły dają taki sam slug
Tytuły „Cześć, świecie!" i „cześć świecie" po normalizacji (małe litery, usunięcie interpunkcji) zamienią się na ten sam slug czesc-swiecie, mimo że teksty źródłowe są różne. Jeśli slug jest używany jako unikalny identyfikator (np. w URL artykułu), taką kolizję trzeba rozwiązać dodatkowo — zwykle poprzez dodanie liczbowego sufiksu lub ID do duplikatu.