SlugGenerator.app

Como converter texto em slug em JavaScript, Python e PHP

7 min de leitura

Converter texto em slug—transformar uma string legível em um slug seguro para URL—é uma tarefa comum no desenvolvimento web. Seja criando um blog, uma loja virtual ou uma API, você precisará gerar slugs limpos a partir de títulos e outros textos. Este guia mostra como fazer isso nas três linguagens de servidor mais populares.

Não quer escrever código? Use nossa ferramenta Slugify Online para converter texto em slugs instantaneamente no navegador.

JavaScript / Node.js

Usando a biblioteca slugify

A abordagem mais popular em JavaScript é o pacote 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

Opções explicadas:

  • lower: true — converte para minúsculas
  • strict: true — remove todos os caracteres que não sejam letras, números ou o separador
  • trim: true — remove os separadores do início e do fim

Implementação manual

Se preferir não adicionar uma dependência, aqui está uma função 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, '');
}

Ela trata caracteres acentuados via normalização Unicode, converte para minúsculas, remove caracteres especiais e condensa os espaços em hífens simples.

Python

Usando python-slugify

A biblioteca padrão para gerar slugs em Python é 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

O python-slugify usa por baixo a biblioteca text-unidecode para transliteração, que lida com uma ampla gama de caracteres Unicode, incluindo CJK.

O slugify embutido do Django

Se você usa Django, ele tem um utilitário slugify embutido:

from django.utils.text import slugify

slug = slugify("My Blog Post Title")
# Output: my-blog-post-title

Observação: o slugify do Django não faz transliteração por padrão. Para caracteres acentuados, combine-o com unidecode.

PHP

Str::slug() do Laravel

O Laravel oferece um helper de slug limpo:

use Illuminate\Support\Str;

$slug = Str::slug("Café Menu — Special Édition!");
// Output: cafe-menu-special-edition

O Str::slug() faz a transliteração, a conversão para minúsculas e a remoção de caracteres especiais em uma única chamada.

Implementação manual

Sem framework, aqui está uma função slugify em 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, '-');
}

Ela usa a extensão intl do PHP para transliteração. Certifique-se de que a extensão intl esteja habilitada no seu php.ini.

Tabela comparativa

RecursoJS (slugify)Python (python-slugify)PHP (Laravel)
TransliteraçãoLatim básicoUnicode completoUnicode completo
Separador personalizadoSimSimSim
Comprimento máximoNãoSimNão (manual)
Suporte a CJKNãoSimParcial

Quando usar uma biblioteca x ferramenta online

Use uma biblioteca quando precisar gerar slugs de forma programática em tempo de execução—por exemplo, gerar uma URL automaticamente quando um usuário cria um post de blog.

Use uma ferramenta online quando precisar de um slug pontual ou quiser verificar rapidamente como um título fica como URL. Nosso conversor de texto para slug oferece separadores personalizados, comprimento máximo e transliteração—todas as opções que você configuraria em uma biblioteca, sem escrever código.