Slug Generator
Převeďte libovolný text na čistý URL-friendly slug
Vstupní text
Slug
Co je URL slug?
URL slug je část webové adresy, která identifikuje konkrétní stránku v lidsky čitelné podobě. V URL https://example.com/blog/my-first-post je slugem my-first-post. Generátor slugů transformuje název stránky nebo popis na řetězec obsahující pouze malá písmena, číslice a pomlčky (nebo jiný zvolený oddělovač). Tento proces odstraní mezery, diakritiku, speciální znaky a normalizuje bílé znaky na jednotlivé oddělovače.
Generování slugů je standardním krokem v systémech pro správu obsahu, generátorech statických stránek, blogovacích platformách a v každé aplikaci, která odvozuje URL adresy z uživatelského vstupu. WordPress, Ghost, Hugo, Next.js i Django obsahují logiku pro generování slugů, protože čitelné URL adresy zlepšují jak použitelnost, tak optimalizaci pro vyhledávače. Správně sestavený slug uživateli sdělí obsah stránky ještě před kliknutím na odkaz.
Pojem „slug“ pochází z novinového vydavatelství, kde označoval krátký štítek používaný k identifikaci článku během výroby. Ve webovém vývoji slug plní stejnou funkci: je to kompaktní, jedinečný, URL-bezpečný identifikátor odvozený z delšího názvu nebo titulku. Protože se slugy generují programově, spolehlivý generátor zajistí konzistenci na každé stránce a v každém jazyce.
Proč používat tento Slug Generator?
Ruční vytváření URL slugů je náchylné k chybám. Opomenutá diakritika, dvojitá pomlčka nebo nezohraněný okrajový případ s Unicode vstupem mohou vytvořit nefunkční nebo ošklivé URL adresy. Tento nástroj tyto problémy řeší automaticky.
Případy použití Slug Generatoru
Pravidla generování slugů a zpracování znaků
Generování slugů se řídí předvídatelnou posloupností transformací. Pochopení každého kroku pomáhá ladit neočekávaný výstup nebo vytvořit vlastní funkci slugify.
- 1. Unicode normalizace (NFD)Rozložte kombinované znaky na základní znak + kombinační značku. Například é (U+00E9) se stane e + combining acute accent (U+0301). Díky tomu lze diakritiku v dalším kroku odstranit.
- 2. Odstranění diakritikyOdstraňte všechny znaky v bloku Unicode Combining Diacritical Marks (U+0300–U+036F). Po tomto kroku se café stane cafe a Ñ se stane N.
- 3. Odstranění speciálních znakůNahraďte každý znak, který není písmeno, číslice, bílý znak nebo pomlčka, mezerou. Tím se odstraní interpunkce, symboly a znaky bez ASCII ekvivalentu.
- 4. Oříznutí a sjednocení bílých znakůOdstraňte počáteční a koncové bílé znaky, poté sjednoťte všechny sekvence po sobě jdoucích mezer, podtržítek nebo pomlček na jediný zvolený oddělovač.
- 5. Použití velikosti písmen a oddělovačePřeveďte na malá písmena (volitelně) a spojte slova zvoleným oddělovačem: pomlčka (-), podtržítko (_) nebo tečka (.).
Referenční tabulka transformace znaků
Níže uvedená tabulka ukazuje, jak jsou běžné znaky zpracovány během generování slugů:
| Vstup | Výstup | Použité pravidlo |
|---|---|---|
| Hello World | hello-world | Lowercase + space → hyphen |
| Café au Lait | cafe-au-lait | NFD normalization strips é → e |
| naïve résumé | naive-resume | Multiple diacritics removed |
| Price: $9.99! | price-9-99 | Symbols ($, !, :) removed |
| too many | too-many | Whitespace trimmed and collapsed |
| one--two___three | one-two-three | Mixed separators collapsed |
| Привет мир | privet-mir | Cyrillic (if transliteration) or removed |
| file_name.txt | file-name-txt | Dots and underscores replaced |
| React & Vue | react-vue | Ampersand removed |
| 2026-03-30 | 2026-03-30 | Digits and hyphens preserved |
Příklady kódu
Generování slugů v populárních jazycích a frameworcích. Každý příklad zpracovává Unicode normalizaci, odstranění diakritiky a vkládání oddělovačů.
function slugify(text, separator = '-') {
return text
.normalize('NFD') // decompose accented chars
.replace(/[\u0300-\u036f]/g, '') // strip diacritics
.toLowerCase()
.replace(/[^\w\s-]/g, ' ') // drop special chars
.trim()
.replace(/[\s_-]+/g, separator) // collapse whitespace → separator
// slugify('Café au Lait') → "cafe-au-lait"
// slugify('Hello World', '_') → "hello_world"
}
// Node.js alternative using the `slugify` npm package:
// npm install slugify
// const slugify = require('slugify')
// slugify('Hello World', { lower: true, strict: true }) → "hello-world"import re
import unicodedata
def slugify(text: str, separator: str = '-') -> str:
"""Convert text to a URL-safe slug."""
text = unicodedata.normalize('NFD', text)
text = text.encode('ascii', 'ignore').decode('ascii') # strip non-ASCII
text = text.lower()
text = re.sub(r'[^\w\s-]', ' ', text)
text = text.strip()
text = re.sub(r'[\s_-]+', separator, text)
return text
# slugify('Café au Lait') → "cafe-au-lait"
# slugify('Hello World', '_') → "hello_world"
# Alternative: python-slugify (pip install python-slugify)
# from slugify import slugify
# slugify('Café au Lait') → "cafe-au-lait"package main
import (
"regexp"
"strings"
"unicode"
"golang.org/x/text/unicode/norm"
"golang.org/x/text/transform"
"golang.org/x/text/runes"
)
func slugify(text string) string {
// NFD normalize and strip diacritics
t := transform.Chain(norm.NFD, runes.Remove(runes.In(unicode.Mn)), norm.NFC)
result, _, _ := transform.String(t, text)
result = strings.ToLower(result)
re := regexp.MustCompile(`[^\w\s-]+`)
result = re.ReplaceAllString(result, " ")
result = strings.TrimSpace(result)
re = regexp.MustCompile(`[\s_-]+`)
result = re.ReplaceAllString(result, "-")
return result
}
// slugify("Café au Lait") → "cafe-au-lait"
// slugify("Hello World") → "hello-world"function slugify(string $text, string $separator = '-'): string {
// Transliterate non-ASCII characters
$text = transliterator_transliterate(
'Any-Latin; Latin-ASCII; Lower()', $text
);
// Remove anything that is not a word char, space, or hyphen
$text = preg_replace('/[^\w\s-]/', ' ', $text);
$text = trim($text);
$text = preg_replace('/[\s_-]+/', $separator, $text);
return $text;
}
// slugify('Café au Lait') → "cafe-au-lait"
// slugify('Hello World', '_') → "hello_world"