Slugify text (URL)
Normalize text into URL-friendly slugs, supporting lowercase, custom separators, and custom stop words removal.
De ce este nevoie de Slugify?
🔍 Optimizare SEO
Cuvintele cheie din URL ajută motoarele de căutare să înțeleagă conținutul paginii și să îl clasifice mai bine. De exemplu, example.com/blog/how-to-learn-javascript este mai prietenos decât example.com/blog/123.
👁️ Lizibilitate și partajare
Utilizatorii pot înțelege conținutul doar din URL, ceea ce face partajarea pe rețelele sociale mai eficientă și facilitează memorarea sau introducerea manuală.
💻 Compatibilitate sistem
Evită erorile cauzate de caractere speciale în numele fișierelor sau URL-uri, asigură compatibilitate între platforme (Windows/Linux/Mac) și previne probleme de codare.
🗄️ Prietenos pentru baze de date
Folosit ca identificator unic (de exemplu, nume de utilizator sau etichete), reduce riscul de injecții SQL și facilitează indexarea și interogările.
Ce este Slugify?
Un slug este o frază standardizată folosită ca URL, nume de fișier sau identificator. Procesul comun include uniformizarea dimensiunii literelor, eliminarea punctuației și conectarea cuvintelor cu un separator.
- Prioritate ASCII: încearcă să elimini diacriticele și simbolurile, păstrând doar litere, cifre și spații
- Compatibilitate Unicode: normalizează caracterele din majoritatea limbilor folosind NFKD înainte de procesare
- Prietenos pentru URL: rezultatul conține doar litere, cifre și separatori, fiind gata pentru utilizare în căi
Întrebări frecvente
Q: Cum sunt tratate caracterele chinezești?
A: Implicit, diacriticele sunt eliminate, păstrându-se literele pinyin. Textul pur chinezesc poate deveni gol; se recomandă să convertiți manual în pinyin înainte de slugify, sau să folosiți un instrument de conversie pinyin chinezesc.
Q: De ce rezultatul meu este gol?
A: Este posibil ca inputul să conțină doar semne de punctuație/simboluri/spații, sau să nu rămână cuvinte după filtrarea cuvintelor inutile. Încercați să dezactivați opțiunea de cuvinte inutile sau să ajustați conținutul de intrare.
Q: Ce separator ar trebui să folosesc: - sau _?
A: Pentru SEO, se recomandă - (cratimă), deoarece Google o interpretează ca un spațiu; _ (underline) este tratat ca un caracter de conectare, ceea ce împiedică divizarea corectă a cuvintelor. Pentru numele fișierelor, puteți alege oricare.
Q: Există o limită de lungime pentru slug?
A: Tehnic nu există limită, dar se recomandă să mențineți lungimea sub 50 de caractere pentru o afișare ULR optimă și SEO. Slug-urile prea lungi pot fi tăiate de motoarele de căutare.
Cele mai bune practici
Practici recomandate
- ✓ Păstrați-le scurte (recomandat < 50 de caractere)
- ✓ Evitați caracterele speciale; folosiți doar litere, cifre și separatori
- ✓ Convertește în litere mici pentru a evita problemele de sensibilitate la majuscule/minuscule
- ✓ Eliminați cuvintele inutile pentru a crește densitatea semantică
Ce trebuie evitat
- ✗ Nu includeți informații sensibile (cum ar fi ID-uri, email-uri, parole)
- ✗ Nu folosiți caractere speciale (cum ar fi @#$%^&*)
- ✗ Nu păstrați spațiile sau separatorii consecutivi
- ✗ Nu repetați același cuvânt
Note tehnice
Se folosește descompunerea NFKD + eliminarea diacriticelor (\p{M}), transformând Café în Cafe. Suportă majoritatea caracterelor latine.
Bazată pe cuvinte comune în engleză (a/an/the/and/or/of/to/in/on/for/at/by/with); poate fi extinsă personalizat. Cuvintele inutile în limba chineză necesită procesare suplimentară.
Este necesară suportul pentru ES6+ și expresii regulate Unicode (\p{...}). Toate browserele moderne (Chrome 64+, Firefox 78+, Safari 11.1+) le suportă.
Cum se generează un slug prin intermediul unui limbaj de programare?
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("^-+|-+$", "");
}