Slug Generator
Konvertera valfri text till en ren URL-vänlig slug
Inmatningstext
Slug
Vad är ett URL-slug?
Ett URL-slug är den del av en webbadress som identifierar en specifik sida i en läsbar form. I URL:en https://example.com/blog/my-first-post är slugget my-first-post. En slug-generator omvandlar en sidtitel eller beskrivning till en sträng som bara innehåller gemener, siffror och bindestreck (eller ett annat valt avskiljartecken). Processen tar bort mellanslag, strippar accenter och diakritiska tecken, tar bort specialtecken och normaliserar blanksteg till enstaka avskiljare.
Slug-generering är ett standardsteg i innehållshanteringssystem, statiska webbplatsgeneratorer, bloggplattformar och alla applikationer som härleder URL:er från användarinmatning. WordPress, Ghost, Hugo, Next.js och Django inkluderar alla slug-genereringslogik eftersom läsbara URL:er förbättrar både användbarhet och sökmotoroptimering. Ett välformat slug berättar för användaren vad en sida innehåller redan innan de klickar på länken.
Termen "slug" kommer från tidningsproduktion, där det syftade på en kort etikett som användes för att identifiera en artikel under produktionen. Inom webbutveckling fyller slugget samma funktion: det är ett kompakt, unikt, URL-säkert identifierare som härleds från en längre titel eller ett namn. Eftersom slugs härleds programmatiskt säkerställer en tillförlitlig slug-generator konsekvens på varje sida och i varje locale.
Varför använda den här Slug Generator?
Att skapa URL-slugs manuellt är felbenäget. Att glömma att ta bort en accent, lämna ett dubbelt bindestreck eller missa ett kantfall med Unicode-inmatning kan ge trasiga eller fula URL:er. Det här verktyget hanterar sådana problem automatiskt.
Användningsfall för Slug Generator
Regler och teckenhantering vid slug-generering
Slug-generering följer en förutsägbar sekvens av transformationer. Att förstå varje steg hjälper dig att felsöka oväntad utdata eller bygga din egen slugify-funktion.
- 1. Unicode-normalisering (NFD)Dela upp sammansatta tecken i bastecknet + kombinationsmärke. Till exempel blir é (U+00E9) e + kombinationsakcent (U+0301). Det gör att diakritiska tecken kan tas bort i nästa steg.
- 2. Strippa diakritiska teckenTa bort alla tecken i Unicode-blocket Combining Diacritical Marks (U+0300–U+036F). Efter det här steget blir café cafe och Ñ blir N.
- 3. Ta bort specialteckenErsätt alla tecken som inte är bokstäver, siffror, blanksteg eller bindestreck med ett mellanslag. Det tar bort skiljetecken, symboler och tecken som saknar ASCII-motsvarighet.
- 4. Trimma och komprimera blankstegTa bort inledande och avslutande blanksteg och komprimera sedan alla sekvenser av på varandra följande mellanslag, understreck eller bindestreck till ett enda valt avskiljartecken.
- 5. Tillämpa skiftläge och avskiljareKonvertera till gemener (valfritt) och sätt ihop ord med det valda avskiljartecknet: bindestreck (-), understreck (_) eller punkt (.).
Referens för teckentransformationer
Tabellen nedan visar hur vanliga tecken hanteras under slug-genereringen:
| Inmatning | Utdata | Tillämpad regel |
|---|---|---|
| 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 |
Kodexempel
Slug-generering i populära språk och ramverk. Varje exempel hanterar Unicode-normalisering, borttagning av diakritiska tecken och infogning av avskiljare.
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"