Classes em PHP » Classe StringToSlug Versão PHP Server Side
25 de julho de 2010 por Leo Caseiro
A Classe StringToSlug transforma qualquer String em formato Slug. Transformando os caracteres em letras minúsculas, fazendo uma troca/replace de caracteres com acentuação em caracteres não acentuados. E transformando espaços em hífens.
Link para o GitHub
Migrado para o GitHub em 28/07/2010 por Samir Braga
StringToSlug PHP
Existem diversos algoritmos que transformam String em Slugs(permalinks). Mas à maioria com expressões regulares e que retiram qualquer caractere acentuado na língua Portuguesa. Funcionam muito bem no idioma Inglês, mas não resolve para o nosso idioma(Português do Brasil).
Foi por isso que o Samir Braga criou uma Classe com um algoritmo semelhante à do jQuery Plugin StringToSlug feita em PHP.
O Samir à chamou de Permalink. Mas como percebi que na Web o termo SLUG é bem conhecido e utilizado. Deixo com este nome para facilitar quem procura este algoritmo.
Para quem não sabe o que é um SLUG. É simplesmente uma string transformada em letras minúsculas e sem acentuação. Assim transformamos títulos de artigos em URL amigáveis. Melhorando usabilidade e SEO.
Caso tenham alguma dúvida/crítica/sugestão deixem nos comentários que farei o possível para responder. Ou outros usuários podem ajudar nas respostas.
Os exemplos de como utilizar a classe StringToSlug estão no link:
http://github.com/samir/StringToSlug/blob/master/example.php
Gostou do Post? Assine o Feed 
Artigos Relacionados:
Viva. Porque é que não funciona se a string for enviada no URL por POST?
ex:
http://testslug.php?data=primeiro+pr%E9mio+na+exp…
fica: primeiro-pr-o-na-exposi-de-ca
Não percebo, pois se eu fizer $mydata = $_GET['data'] obtenho uma string: "primeiro prémio na exposição de caça" ..
Estou a falhar alguma coisa, certo?
gracias!
OK… esqueçam.
O documento que enviava os dados não estava com a mesma codificação do que recebia (UTF-8).
Bom script!
Eu ia te pedir para verificar os encondings.
Qualquer coisa, comenta ae!
Abs
Funciona para línguas latinas. Só. É possível aperfeiçoar os replacements, mas serias necessário um arquivo externo com codificação utf-16.. para compreender todos os caractéres especiais.
Valeu por postar o código! Se alguém estiver interessado em uma versão em C#, segue aqui:
public static string GenerateSlug(string texto) {
byte[] bytes = System.Text.Encoding.GetEncoding(“Cyrillic”).GetBytes(texto);
string str = System.Text.Encoding.ASCII.GetString(bytes).ToLower();
// Remove os caracteres invalido
str = Regex.Replace(str, @”[^a-z0-9\s-]“, “”);
// Remove espacos indevidos para apenas um
str = Regex.Replace(str, @”\s+”, ” “).Trim();
// Limita o tamanho do slung para 45 caracteres
str = str.Substring(0, str.Length <= 45 ? str.Length : 45).Trim();
// Troca os espacos por hifen
str = Regex.Replace(str, @"\s", "-");
return str;
}
Obrigado Leo pela divulgação dessa classe =)
Essa é uma classe super simples que visava resolver um problema igualmente simples =)
Como faz um bom tempo q ela foi feita, e motivado pela divulgação q vc fez, dei uma melhorada nela, implementei umas opcões (mas que não deve afetar quem já a usa, caso atualize) e coloquei comentários em inglês pois coloquei ela no GitHub.
Creio que manter lá será mais fácil pra gente centralizar melhorias que poderão vir, facilitar a colaboração e variações caso alguém queria implementar de outra forma, ou se basear nela para outra finalidade…
http://github.com/samir/StringToSlug
É isso aí!
Abraços,
Nossa, Samir!
Você deixou ela mais prática e funcional ainda!
Atualizei aqui o link para o GitHub.
Valeu mesmo!
Vai ajudar muita gente! Inclusive, a mim…rs
Aeee Leo, prometeu e saiu mesmo.
Grande abraço e parabéns.
Fala Léo,
baseado nas funções que falei no outro comentário criei uma classe. Mais informações neste comentário[1] do blog onde postei o código da classe.
[1] – http://desenvolvimentoparaweb.com/php/urls-amigaveis-slug-a-wordpress/comment-page-1/#comment-1464
Fala Léo,
Muito boa a classe no entanto a um erro de Strict Standards, erro "Strict Standards: Non-static method StringToSlug::stripSpecialChars() should not be called statically in path/paraclasse.php on line 25", isso ocorre porque está tentando acessar o stripSpecialChars() com conotação de método estático utilizando self::stripSpecialChars() isso só funcionaria se o stripSpecialChars() fosse declarado como estático.
Criei alguns testes para classe em[1], no entanto a mais que podem ser criados. Aconselho também a leitura de um post sobre como as slugs do WP são criadas[2].
[1] – http://pastebin.com/thDvtQj0
[2] – http://desenvolvimentoparaweb.com/php/urls-amigav…
Maruro, obrigado pela sua contribuição!
O Samir melhorou a classe e disponibilizou no GitHub!
Confira se está funcionando bem.
Obrigado, mais uma vez!
Abs
Valeu, Leo
Vai ajudar muito essa Classe.
Abraços
[...] Classe StringToSlug Versão PHP Server Side [...]