Cómo convertir texto en slug en JavaScript, Python y PHP
Convertir texto en slug—transformar una cadena legible en un slug seguro para URL—es una tarea habitual en el desarrollo web. Tanto si creas un blog, una tienda online o una API, necesitarás generar slugs limpios a partir de títulos y otros textos. Esta guía te muestra cómo hacerlo en los tres lenguajes de servidor más populares.
¿No quieres escribir código? Usa nuestra herramienta Slugify Online para convertir texto en slugs al instante en tu navegador.
JavaScript / Node.js
Usar la librería slugify
El enfoque más popular en JavaScript es el paquete 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
Opciones explicadas:
lower: true— convierte a minúsculasstrict: true— elimina todos los caracteres que no sean letras, números o el separadortrim: true— elimina los separadores al inicio y al final
Implementación manual
Si prefieres no añadir una dependencia, aquí tienes una función slugify mínima:
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, '');
}
Maneja los caracteres acentuados mediante normalización Unicode, convierte a minúsculas, elimina caracteres especiales y colapsa los espacios en guiones simples.
Python
Usar python-slugify
La librería estándar para crear slugs en Python es 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 usa por debajo la librería text-unidecode para la transliteración, que maneja una amplia gama de caracteres Unicode, incluido CJK.
El slugify integrado de Django
Si usas Django, incluye una utilidad slugify integrada:
from django.utils.text import slugify
slug = slugify("My Blog Post Title")
# Output: my-blog-post-title
Nota: el slugify de Django no hace transliteración por defecto. Para caracteres acentuados, combínalo con unidecode.
PHP
Str::slug() de Laravel
Laravel ofrece un ayudante de slug limpio:
use Illuminate\Support\Str;
$slug = Str::slug("Café Menu — Special Édition!");
// Output: cafe-menu-special-edition
Str::slug() realiza la transliteración, el paso a minúsculas y la eliminación de caracteres especiales en una sola llamada.
Implementación manual
Sin framework, aquí tienes una función 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, '-');
}
Usa la extensión intl de PHP para la transliteración. Asegúrate de que la extensión intl esté habilitada en tu php.ini.
Tabla comparativa
| Característica | JS (slugify) | Python (python-slugify) | PHP (Laravel) |
|---|---|---|---|
| Transliteración | Latín básico | Unicode completo | Unicode completo |
| Separador personalizado | Sí | Sí | Sí |
| Longitud máxima | No | Sí | No (manual) |
| Soporte CJK | No | Sí | Parcial |
Cuándo usar una librería frente a una herramienta online
Usa una librería cuando necesites generar slugs de forma programática en tiempo de ejecución—por ejemplo, autogenerar una URL cuando un usuario crea una entrada de blog.
Usa una herramienta online cuando necesites un slug puntual o quieras comprobar rápidamente cómo se ve un título como URL. Nuestro conversor de texto a slug admite separadores personalizados, longitud máxima y transliteración—todas las opciones que configurarías en una librería, sin escribir código.