Slugify du texte (URL)
Normalisez le texte en un slug compatible avec les URLs, avec prise en charge de la mise en minuscules, des séparateurs et des mots vides personnalisés.
Pourquoi utiliser un slug ?
🔍 Optimisation SEO
Les mots-clés dans les URLs aident les moteurs de recherche à comprendre le contenu de la page, améliorant ainsi son classement. Par exemple, example.com/blog/how-to-learn-javascript est bien plus convivial que example.com/blog/123.
👁️ Lisibilité et partage
Les utilisateurs comprennent immédiatement le contenu de la page en voyant l'URL, ce qui rend le partage sur les réseaux sociaux plus efficace et facilite la mémorisation et la saisie manuelle.
💻 Compatibilité système
Évitez les erreurs causées par des caractères spéciaux dans les noms de fichiers ou les URLs, assurez une compatibilité multi-plateformes (Windows/Linux/Mac) et évitez les problèmes d'encodage.
🗄️ Compatibilité base de données
Utilisez les slugs comme identifiants uniques (ex. : noms d'utilisateur, tags) pour éviter les risques d'injection SQL, et facilitez l'indexation et les requêtes.
Qu'est-ce qu'un slug ?
Un slug est une chaîne de caractères normalisée utilisée comme URL, nom de fichier ou identifiant. Les traitements courants incluent l'unification de la casse, la suppression de la ponctuation et la connexion des mots avec un séparateur.
- Priorité ASCII : supprimer autant que possible les accents et symboles, ne conserver que les lettres, chiffres et espaces
- Compatibilité Unicode : normaliser les caractères de la plupart des langues via NFKD avant traitement
- URL sécurisée : le résultat ne contient que des lettres, chiffres et séparateurs, prêt à être utilisé directement dans un chemin d'URL
Questions fréquentes
Q : Comment les caractères chinois sont-ils traités ?
A : Par défaut, les diacritiques sont supprimés et seules les lettres pinyin sont conservées. Les chaînes entièrement en chinois peuvent devenir vides. Il est recommandé de convertir manuellement en pinyin avant d'appliquer le slugify, ou d'utiliser un outil de conversion pinyin.
Q : Pourquoi mon résultat est-il vide ?
A : L'entrée peut ne contenir que des ponctuations, symboles ou espaces, ou tous les mots restants ont été supprimés après filtration des mots vides. Essayez de désactiver l'option de mots vides ou ajustez votre entrée.
Q : Quel séparateur utiliser : - ou _ ?
A : Pour le SEO, privilégiez le tiret (-), que Google interprète comme un espace. Le soulignement (_) est traité comme un caractère de liaison, ce qui nuit à la séparation des mots. Pour les noms de fichiers, les deux sont acceptables.
Q : Y a-t-il une limite de longueur pour les slugs ?
A : Techniquement, aucune limite n'existe, mais il est recommandé de garder une longueur inférieure à 50 caractères pour une meilleure affichage URL et SEO. Un slug trop long risque d'être tronqué par les moteurs de recherche.
Bonnes pratiques
Conseils recommandés
- ✓ Gardez-le court (suggéré : < 50 caractères)
- ✓ Évitez les caractères spéciaux ; utilisez uniquement des lettres, chiffres et séparateurs
- ✓ Utilisez des minuscules pour éviter les problèmes de sensibilité à la casse
- ✓ Supprimez les mots vides pour augmenter la densité sémantique
À éviter
- ✗ N'incluez pas d'informations sensibles (ex. : ID, e-mail, mot de passe)
- ✗ N'utilisez pas de caractères spéciaux (ex. : @#$%^&*)
- ✗ Ne conservez pas les espaces ni les séparateurs consécutifs
- ✗ N'utilisez pas de mots répétés
Notes techniques
Utilisation de la décomposition NFKD + suppression des combinaisons diacritiques (\p{M}), transformant Café en Cafe. Prise en charge de la plupart des caractères latins.
Basée sur les mots courants en anglais (a/an/the/and/or/of/to/in/on/for/at/by/with). Peut être étendue par l'utilisateur. Les mots vides chinois nécessitent un traitement spécifique.
Nécessite la prise en charge d'ES6+ et des expressions régulières Unicode (\p{...}). Tous les navigateurs modernes (Chrome 64+, Firefox 78+, Safari 11.1+) sont compatibles.
Comment générer un slug via un langage de programmation ?
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("^-+|-+$", "");
}