Como converter texto em slug em JavaScript, Python e PHP
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úsculasstrict: true— remove todos os caracteres que não sejam letras, números ou o separadortrim: 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
| Recurso | JS (slugify) | Python (python-slugify) | PHP (Laravel) |
|---|---|---|---|
| Transliteração | Latim básico | Unicode completo | Unicode completo |
| Separador personalizado | Sim | Sim | Sim |
| Comprimento máximo | Não | Sim | Não (manual) |
| Suporte a CJK | Não | Sim | Parcial |
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.