Tekst slugify (URL)
Normeer tekst naar URL-vriendelijke slugs, met ondersteuning voor kleine letters, scheidingstekens en aangepaste stopwoorden.
Waarom Slugify gebruiken?
🔍 SEO-optimalisatie
Trefwoorden in URL's helpen zoekmachines de inhoud van een pagina te begrijpen en verbeteren de ranking. Bijvoorbeeld: example.com/blog/how-to-learn-javascript is veel beter dan example.com/blog/123.
👁️ Leesbaarheid en delen
Gebruikers kunnen aan de URL zien wat de inhoud is. Dit maakt het makkelijker om te delen op sociale media en te onthouden of handmatig in te typen.
💻 Systeemcompatibiliteit
Voorkom fouten door speciale tekens in bestandsnamen of URL's. Werk probleemloos cross-platform (Windows, Linux, Mac) en vermijd coderingsproblemen.
🗄️ Database-vriendelijk
Gebruik slugs als unieke identifiers (bijv. gebruikersnamen, tags) om SQL-injectierisico's te vermijden en indexering en query's te vergemakkelijken.
Wat is Slugify?
Een slug is een gestandaardiseerde tekstreeks die wordt gebruikt als URL, bestandsnaam of identificator. Typische bewerkingen omvatten het uniform maken van hoofd- en kleine letters, verwijderen van leestekens en verbinden van woorden met scheidingstekens.
- ASCII-prioriteit: verwijder accenten en symbolen zoveel mogelijk, behoud alleen alfanumerieke tekens en spaties
- Unicode-compatibel: normaliseer de meeste Unicode-tekens met NFKD voordat ze worden verwerkt
- URL-vriendelijk: het resultaat bevat alleen letters, cijfers en scheidingstekens, geschikt voor direct gebruik in URL-paden
Veelgestelde vragen
Q: Hoe worden Chinese tekens verwerkt?
A: Standaard worden diakritische tekens verwijderd en blijft de pinyin-letters over. Zuiver Chinees kan leeg worden; raad aan om eerst handmatig naar pinyin te converteren voordat je slugify gebruikt, of een Chinese pinyin-conversietool te gebruiken.
Q: Waarom is mijn resultaat leeg?
A: Mogelijk bevat de invoer alleen leestekens/symbolen/leestekens, of zijn na het filteren van stopwoorden geen woorden meer overgebleven. Probeer de optie voor stopwoorden uit te schakelen of je invoer aan te passen.
Q: Moet ik - of _ gebruiken als scheidingsteken?
A: Voor SEO wordt aanbevolen om - (koppelteken) te gebruiken; Google interpreteert dit als een spatie. _ (onderstrepingsteken) wordt gezien als een samenstellingskarakter, wat het woordontleden bemoeilijkt. Bij bestandsnamen kun je kiezen.
Q: Is er een limiet voor de lengte van een slug?
A: Technisch gezien is er geen limiet, maar het is aan te raden om de slug kort te houden (minder dan 50 tekens) voor betere weergave in URLs en SEO. Te lange slugs kunnen door zoekmachines worden afgekapt.
Best practices
Aanbevolen praktijken
- ✓ Kort houden (aanbevolen < 50 tekens)
- ✓ Vermijd speciale tekens; gebruik alleen letters, cijfers en scheidingstekens
- ✓ Gebruik kleine letters om gevoeligheid voor hoofd- en kleine letters te voorkomen
- ✓ Verwijder stopwoorden om de semantische dichtheid te verhogen
Te vermijden praktijken
- ✗ Geen gevoelige informatie opnemen (zoals ID’s, e-mailadressen, wachtwoorden)
- ✗ Geen speciale tekens gebruiken (zoals @#$%^&*)
- ✗ Geen spaties of opeenvolgende scheidingstekens behouden
- ✗ Geen dezelfde woorden herhalen
Technische details
Gebruik NFKD-decompositie + verwijdering van combinerende diakritische tekens (\p{M}), bijvoorbeeld Café wordt Cafe. Ondersteunt de meeste Latijnse tekensets.
Gebaseerd op veelvoorkomende Engelse woorden (a/an/the/and/or/of/to/in/on/for/at/by/with); kan worden aangepast. Chinese stopwoorden vereisen extra verwerking.
Ondersteuning van ES6+ en Unicode-regex (\p{...}) is vereist. Moderne browsers (Chrome 64+, Firefox 78+, Safari 11.1+) ondersteunen dit allemaal.
Hoe genereer je een slug via een programmeertaal?
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("^-+|-+$", "");
}