Text Slugify (URL)

Normalizuje text na URL-přívětivý slug s podporou malých písmen, oddělovačů a vlastních stop slov.

Parametry a vstup

Doporučeno: - nebo _, délka 1–3 znaky

Výsledek

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

Použití

URL článků na blogu

Jak se naučit JavaScript?

how-to-learn-javascript

Jmenné konvence souborů

Dokument s požadavky na produkt v2.0.docx

product-requirements-v2-0.docx

Identifikátory databáze

Uživatel-张三

user-zhang-san

Č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

Normalizace Unicode:

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ů.

Seznam stopových slov:

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.

Kompatibilita s prohlížeči:

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("^-+|-+$", "");
}