Comment slugifier du texte en JavaScript, Python et PHP
Slugifier du texte—convertir une chaîne lisible par l'humain en un slug compatible avec les URLs—est une tâche courante en développement web. Que vous construisiez un blog, un site e-commerce ou une API, vous devrez générer des slugs propres à partir de titres et d'autres textes. Ce guide montre comment le faire dans les trois langages serveur les plus populaires.
Vous ne voulez pas écrire de code ? Utilisez notre outil Slugify Online pour convertir du texte en slugs instantanément dans votre navigateur.
JavaScript / Node.js
Utiliser la bibliothèque slugify
L'approche la plus populaire en JavaScript est le paquet npm slugify :
npm install slugify
const slugify = require('slugify');
const title = "Café Menu — Special Édition!";
const slug = slugify(title, {
lower: true,
strict: true,
trim: true
});
console.log(slug);
// Output: cafe-menu-special-edition
Les options expliquées :
lower: true— convertit en minusculesstrict: true— supprime tous les caractères qui ne sont pas des lettres, des chiffres ou le séparateurtrim: true— supprime les séparateurs au début et à la fin
Implémentation manuelle
Si vous préférez ne pas ajouter de dépendance, voici une fonction slugify minimale :
function slugify(text) {
return text
.normalize('NFKD')
.replace(/[\u0300-\u036f]/g, '')
.toLowerCase()
.trim()
.replace(/[^a-z0-9\s-]/g, '')
.replace(/[\s_]+/g, '-')
.replace(/-+/g, '-')
.replace(/^-|-$/g, '');
}
Elle gère les caractères accentués via la normalisation Unicode, convertit en minuscules, supprime les caractères spéciaux et réduit les espaces en simples traits d'union.
Python
Utiliser python-slugify
La bibliothèque standard pour la slugification en Python est python-slugify :
pip install python-slugify
from slugify import slugify
title = "Café Menu — Special Édition!"
slug = slugify(title)
print(slug)
# Output: cafe-menu-special-edition
python-slugify utilise en interne la bibliothèque text-unidecode pour la translittération, qui gère un large éventail de caractères Unicode, y compris le CJK.
Le slugify intégré de Django
Si vous utilisez Django, il dispose d'un utilitaire slugify intégré :
from django.utils.text import slugify
slug = slugify("My Blog Post Title")
# Output: my-blog-post-title
Remarque : le slugify de Django ne gère pas la translittération par défaut. Pour les caractères accentués, combinez-le avec unidecode.
PHP
Str::slug() de Laravel
Laravel fournit un helper de slug propre :
use Illuminate\Support\Str;
$slug = Str::slug("Café Menu — Special Édition!");
// Output: cafe-menu-special-edition
Str::slug() gère la translittération, la mise en minuscules et la suppression des caractères spéciaux en un seul appel.
Implémentation manuelle
Sans framework, voici une fonction slugify en PHP :
function slugify(string $text): string {
$text = transliterator_transliterate(
'Any-Latin; Latin-ASCII; Lower()',
$text
);
$text = preg_replace('/[^a-z0-9\s-]/', '', $text);
$text = preg_replace('/[\s_]+/', '-', $text);
$text = preg_replace('/-+/', '-', $text);
return trim($text, '-');
}
Elle utilise l'extension intl de PHP pour la translittération. Assurez-vous que l'extension intl est activée dans votre php.ini.
Tableau comparatif
| Fonctionnalité | JS (slugify) | Python (python-slugify) | PHP (Laravel) |
|---|---|---|---|
| Translittération | Latin de base | Unicode complet | Unicode complet |
| Séparateur personnalisé | Oui | Oui | Oui |
| Longueur maximale | Non | Oui | Non (manuel) |
| Prise en charge du CJK | Non | Oui | Partielle |
Quand utiliser une bibliothèque plutôt qu'un outil en ligne
Utilisez une bibliothèque lorsque vous devez générer des slugs de façon programmatique à l'exécution—par exemple, générer automatiquement une URL quand un utilisateur crée un article de blog.
Utilisez un outil en ligne lorsque vous avez besoin d'un slug ponctuel ou que vous voulez vérifier rapidement à quoi ressemble un titre en tant qu'URL. Notre convertisseur de texte en slug prend en charge les séparateurs personnalisés, la longueur maximale et la translittération—toutes les options que vous configureriez dans une bibliothèque, sans écrire de code.