Slugifikacja tekstu (URL)

Normalizuj tekst do przyjaznego dla URL sluga, z obsługą małych liter, separatorów i niestandardowych wyrazów stopu.

Parametry i dane wejściowe

Zalecane: - lub _, długość 1–3 znaki

Wynik

Dlaczego warto używać Slugify?

🔍 Optymalizacja SEO

Słowa kluczowe w URL pomagają wyszukiwarkom zrozumieć treść strony i poprawiają jej pozycję. Na przykład example.com/blog/how-to-learn-javascript jest bardziej przyjazny niż example.com/blog/123.

👁️ Czytelność i udostępnianie

Użytkownicy mogą od razu zrozumieć treść na podstawie URL — idealne do udostępniania w mediach społecznościowych, łatwe do zapamiętania i ręcznego wprowadzenia.

💻 Zgodność systemowa

Unikaj błędów spowodowanych specjalnymi znakami w nazwach plików i URL — zapewnia kompatybilność między platformami (Windows/Linux/macOS) i unika problemów kodowania.

🗄️ Przyjazny dla bazy danych

Jako unikalny identyfikator (np. nazwa użytkownika, tag) zapobiega atakom SQL Injection, ułatwia indeksowanie i zapytania.

Co to jest Slugify?

Slug to skrócona, znormalizowana wersja tekstu używana jako URL, nazwa pliku lub identyfikator. Typowe operacje obejmują jednolite wielkości liter, usuwanie znaków interpunkcyjnych i łączenie słów separatorami.

  • Priorytet ASCII: usuń akcenty i symbole, pozostaw tylko litery, cyfry i spacje
  • Zgodność z Unicode: znormalizuj znaki większości języków za pomocą NFKD przed przetworzeniem
  • Przyjazny dla URL: wynik zawiera tylko litery, cyfry i separator — gotowy do użycia w ścieżkach

Zastosowania

URL artykułów blogowych

Jak nauczyć się JavaScript?

how-to-learn-javascript

Nazwanie plików

Dokument wymagań produktu v2.0.docx

product-requirements-v2-0.docx

Identyfikatory bazy danych

Użytkownik-张三

user-zhang-san

Często zadawane pytania

Q: Jak są obsługiwane znaki chińskie?

A: Domyślnie diakrytyki są usuwane, a pozostawiane są litery pinyiny. Czyste znaki chińskie mogą stać się puste; zaleca się ręczne przekonwertowanie na pinyiny przed slugify lub użycie narzędzia do konwersji chińskiego na pinyiny.

Q: Dlaczego moja wartość jest pusta?

A: Wejście może składać się wyłącznie ze znaków interpunkcyjnych, symboli lub spacji, lub po włączeniu filtrowania słów nieistotnych nie pozostały żadne wyrazy. Spróbuj wyłączyć opcję filtrowania słów nieistotnych lub zmienić treść wejściową.

Q: Jakiego separatora należy użyć: - czy _?

A: Dla SEO zalecany jest - (myślnik), ponieważ Google traktuje go jako spację; _ (podkreślenie) jest traktowane jako łącznik, co utrudnia rozdzielenie wyrazów. W nazwach plików można wybrać dowolny.

Q: Czy istnieje limit długości sluga?

A: Technicznie nie ma limitu, ale zaleca się utrzymanie długości poniżej 50 znaków, aby zapewnić czytelność URL i lepszy SEO. Długie slugi mogą zostać przcięte przez wyszukiwarek.

Najlepsze praktyki

Zalecane podejście

  • Zachowaj krótką formę (zalecane < 50 znaków)
  • Unikaj znaków specjalnych; używaj tylko liter, cyfr i separatorów
  • Używaj małych liter, aby uniknąć problemów z wielkością liter
  • Usuń słowa nieistotne, aby zwiększyć gęstość semantyczną

Unikaj

  • Nie zawieraj informacji poufnych (np. ID, adres e-mail, hasła)
  • Nie używaj znaków specjalnych (np. @#$%^&*)
  • Nie zachowuj spacji ani ciągłych separatorów
  • Nie powtarzaj tych samych słów

Informacje techniczne

Normalizacja Unicode:

Używamy NFKD z usunięciem znaków łączących (\p{M}), np. „Café” staje się „Cafe”. Obsługuje większość znaków układu łacińskiego.

Lista słów nieistotnych:

Opiera się na typowych słowach angielskich (a/an/the/and/or/of/to/in/on/for/at/by/with); można rozszerzyć. Słowa nieistotne w języku chińskim wymagają dodatkowej obsługi.

Zgodność z przeglądarkami:

Wymaga obsługi ES6+ i wyrażeń regularnych Unicode (\p{...}). Wspierane przez nowoczesne przeglądarki (Chrome 64+, Firefox 78+, Safari 11.1+).

Jak wygenerować slug za pomocą języka programowania?

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