Slugifikacja tekstu (URL)
Normalizuj tekst do przyjaznego dla URL sluga, z obsługą małych liter, separatorów i niestandardowych wyrazów stopu.
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
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
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.
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.
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("^-+|-+$", "");
}