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.

Paramètres et saisie

Recommandé : utiliser - ou _, longueur de 1 à 3 caractères

Résultat

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

Scénarios d'utilisation

URL d'articles de blog

Comment apprendre JavaScript ?

how-to-learn-javascript

Nom de fichier

Document de spécifications produit v2.0.docx

product-requirements-v2-0.docx

Identifiant de base de données

Utilisateur-张三

user-zhang-san

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

Normalisation Unicode :

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.

Liste de mots vides :

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.

Compatibilité navigateur :

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