Text Slugify (URL)
Normalizuje text na URL-přívětivý slug s podporou malých písmen, oddělovačů a vlastních stop slov.
Proč používat Slugify?
🔍 Optimalizace pro vyhledávače
Klíčová slova v URL pomáhají vyhledávačům pochopit obsah stránky a zlepšit její umístění. Například example.com/blog/how-to-learn-javascript je přívětivější než example.com/blog/123.
👁️ Čitelnost a sdílení
Uživatelé okamžitě poznají obsah z URL, což usnadňuje sdílení na sociálních sítích a zvyšuje pravděpodobnost, že si ho zapamatují nebo zadají ručně.
💻 Kompatibilita systémů
Zamezí chybám způsobeným speciálními znaky v názvech souborů nebo URL, zajišťuje kompatibilitu mezi platformami (Windows/Linux/Mac) a předchází problémům s kódováním.
🗄️ Přívětivý pro databáze
Jako jedinečný identifikátor (např. uživatelské jméno, štítky) snižuje riziko SQL injekcí a usnadňuje indexaci a dotazy.
Co je Slugify?
Slug je zkrácená, normalizovaná verze textu používaná jako URL, název souboru nebo identifikátor. Běžné operace zahrnují jednotnou velikost písmen, odstranění interpunkce a spojení slov pomocí oddělovačů.
- ASCII优先:Snaží se odstranit diakritiku a symboly, ponechává pouze písmena, číslice a mezery
- Unicode kompatibilní: Normalizuje většinu znaků jazyků pomocí NFKD
- URL přívětivý: Výsledek obsahuje pouze písmena, číslice a oddělovače – přímo použitelné v cestách
Často kladené otázky
Q: Jak jsou zpracovávány čínské znaky?
A: Ve výchozím nastavení jsou diakritické znaménka odstraněna a zachovány jsou pouze písmena pinyinu. Čistě čínský text může být převeden na prázdný řetězec. Doporučujeme nejprve ručně převést na pinyin a pak provést slugify, nebo použít nástroj pro převod čínského textu na pinyin.
Q: Proč je můj výsledek prázdný?
A: Vstup může obsahovat pouze interpunkci, symboly nebo mezery, nebo po odstranění stopových slov zůstaly nulové slova. Zkuste vypnout možnost filtrování stopových slov nebo upravit vstupní text.
Q: Měl bych používat - nebo _ jako oddělovač?
A: Pro SEO se doporučuje používat - (pomlčku), protože Google ji považuje za mezeru. _ (podtržítko) je považováno za spojovací znak a zhoršuje rozpoznávání slov. Pro názvy souborů lze volit libovolně.
Q: Má slug nějaká omezení délky?
A: Technicky žádná omezení neexistují, ale doporučuje se udržovat délku pod 50 znaky pro lepší zobrazení URL a SEO. Příliš dlouhé slugs mohou být vyhledávači zkráceny.
Doporučené postupy
Doporučené praktiky
- ✓ Zůstaňte krátkí (doporučeno < 50 znaků)
- ✓ Vyhněte se speciálním znakům; používejte pouze písmena, číslice a oddělovače
- ✓ Používejte malá písmena pro vyhnutí se problémům s velikostí písmen
- ✓ Odstraňte stopová slova pro zvýšení významové hustoty
Vyhněte se těmto praktikám
- ✗ Nevkládejte citlivé údaje (např. ID, e-mail, hesla)
- ✗ Nepoužívejte speciální znaky (např. @#$%^&*)
- ✗ Neponechávejte mezery ani více oddělovačů za sebou
- ✗ Nepoužívejte opakovaně stejná slova
Technické poznámky
Používá se NFKD dekompozice a odstranění kombinovaných diakritických znamének (\p{M}), např. Café se převede na Cafe. Podporuje většinu latinských znaků.
Založeno na běžných anglických slovech (a/an/the/and/or/of/to/in/on/for/at/by/with), lze rozšířit vlastními položkami. Pro čínská stopová slova je nutná další úprava.
Vyžaduje podporu ES6+ a Unicode regulárních výrazů (\p{...}). Moderní prohlížeče (Chrome 64+, Firefox 78+, Safari 11.1+) tyto funkce podporují.
Jak vytvořit slug pomocí programovacího jazyka?
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("^-+|-+$", "");
}