SlugGenerator.app

Cómo convertir texto en slug en JavaScript, Python y PHP

7 min de lectura

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úsculas
  • strict: true — elimina todos los caracteres que no sean letras, números o el separador
  • trim: 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ísticaJS (slugify)Python (python-slugify)PHP (Laravel)
TransliteraciónLatín básicoUnicode completoUnicode completo
Separador personalizado
Longitud máximaNoNo (manual)
Soporte CJKNoParcial

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.