BlogBlogs.Com.Br

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 Assine o Feed RSS




13 Comentários para “Classe StringToSlug Versão PHP Server Side”

  1. Eduardo disse:

    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!

  2. 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.

  3. 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;
    }

  4. Samir disse:

    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,

  5. Carlos Alan disse:

    Aeee Leo, prometeu e saiu mesmo.
    Grande abraço e parabéns.

  6. Mauro George disse:

    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

  7. Mauro George disse:

    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…

  8. Valeu, Leo

    Vai ajudar muito essa Classe.

    Abraços

  9. [...] Classe StringToSlug Versão PHP Server Side [...]

Comentar

CommentLuv badge