tadarank afiliados

06 junho, 2007

Função limpa texto pra virar URL

Ó, esta é pra quem não frequenta o fórum e o portal iEvolution, afinal quem já frequenta, já viu ela em uso.

Hoje mostro uma função PHP pra variar um pouco né? Ficar só sempre no JavaScript aqui no blog deve ser meio chato pra muitos de vocês. Lets go.

Muitas vezes, principalmente quando estamos trabalhando para deixar nossas url's amigáveis (aqui outros exemplos de friendly url) nos deparamos com alguns links nossos gerados a partir de banco de dados que contém: acentos, cedilha, pontuações, etc.

Isso em um link pode dar boró né?

O wordpress e o blogger têm suas próprias funções pra isto muito mal feitas. Elas desrespeitam nossa beeela língua (hehe) e simplesmente removem os caracteres que têm acento. O que? Acha que isto não dá problema? Lembre-se que "quem tem céu, tem medo".

Pra resorver este póbrema o mico aqui tentou fazer uma funçãozinha.

Função que gera uma texto limpo pra virar URL:

  • limpa acentos e transforma em letra normal
  • limpa cedilha e transforma em c normal, o mesmo com o ñ
  • transforma espaços em hífen (-) (chama hífen mesmo né?)
  • tira caracteres invalidos e pontuações

Por exemplo, temos o texto "O cabeçudo & a máfia é ônti. O cabeçudo & a máfia é ônti.htm"

Que queremos que vire a url "o-cabecudo-a-mafia-e-onti-o-cabecudo-a-mafia-e-onti.htm"

1) Pegue esta minha função

function geraUrlLimpa($texto){
    /* função que gera uma texto limpo pra virar URL:
       - limpa acentos e transforma em letra normal
       - limpa cedilha e transforma em c normal, o mesmo com o ñ
       - transforma espaços em hífen(-)
       - tira caracteres invalidos
      by Micox - elmicox.blogspot.com - www.ievolutionweb.com
    */
    //desconvertendo do padrão entitie (tipo á para á)
    $texto = html_entity_decode($texto);
    //tirando os acentos
    $texto = eregi_replace('[aáàãâä]','a',$texto);
    $texto = eregi_replace('[eéèêë]','e',$texto);
    $texto = eregi_replace('[iíìîï]','i',$texto);
    $texto = eregi_replace('[oóòõôö]','o',$texto);
    $texto = eregi_replace('[uúùûü]','u',$texto);
    //parte que tira o cedilha e o ñ
    $texto = eregi_replace('[ç]','c',$texto);
    $texto = eregi_replace('[ñ]','n',$texto);
    //trocando espaço em branco por underline
    $texto = eregi_replace('( )','-',$texto);
    //tirando outros caracteres invalidos
    $texto = eregi_replace('[^a-z0-9\-]','',$texto);
    //trocando duplo espaço (underline) por 1 underline só
    $texto = eregi_replace('--','-',$texto);
    
    return strtolower($texto);
}

2) Use a danada

$tes = "O cabeçudo & a máfia é ônti. O cabeçudo & a máfia é ônti.htm";
  $tes = geraUrlLimpa($tes)."html";
  echo $tes."
"; //irá gerar o-cabecudo-a-mafia-e-onti-o-cabecudo-a-mafia-e-onti.html

 

Se alguém quiser corrigir o wordpress usando minha função e linkar pro pessoal saber como implantar a modificação, acho que será de grande ajuda para os users do wordpress não terem mais medo de dar o céu aos outros heheh.

Dúvidas, pergunta lá no tópico do fórum ok?

Gostou da dica acima? Então clica nos botões de compartilhamento abaixo e me ajude a dica a subir no Google.

11 comentários:

  1. Opa, so lembrando que em questão de otimização de desempenho para buscadores, é melhor "-" do que "_"

    Mas muito boa função

    :)

    ResponderExcluir
  2. Caracas, não sabia.
    Valeu otavio.

    Vou alterar agora então.

    ResponderExcluir
  3. Amigo,

    Bacana essa função. Vale também o comentario do cardoso, apesar de ser diferente a situação:

    http://www.contraditorium.com/2007/01/23/permalink-quem-tem-cuacute-tem-medo-2/

    ResponderExcluir
  4. Opa Micael,
    A situação é a mesma :)
    Eu, inclusive, cito o post do cardoso no meu texto.

    ResponderExcluir
  5. Não há uma classe posix para pontuação? tipo [[:punct:]] o que pouparia algumas linhas de código?

    Não sei se a classe posix "punct" engloba caracteres acentuados mas vale uma pesquisada, veja também algo sobre expressões regulares aqui

    ResponderExcluir
  6. No meu Wordpress nunca tive problemas com URLs e acentos. Sempre foi tudo correto como a sua função se propõe a fazer. Estranho, não?

    ResponderExcluir
  7. @voyag3r
    Opa velho, valeus. Mas esta classe aí não vai me ajudar não pois ela pega só as pontuações :(
    Mesmo que tivesse uma que pegasse TODOS os acentuados acredito que não seria possível achar qual o caractere não acentuado equivalente.

    @Alexandre.
    Opa. Deve ser versão nova hhehe.

    ResponderExcluir
  8. Pow..muito bom em micao!

    vc é o cara! hehehe

    abs!

    ResponderExcluir
  9. Muito show cara, mas so lembrando underline é o _ o - é hífen.

    abrçs

    ResponderExcluir
  10. haeuhhu, valeu pelo lembrete. Só esqueci de alterar nos comments do script heheh

    ResponderExcluir
  11. Função otimizada pra utf-8

    function geraUrlLimpa($texto){
    /* função que gera uma texto limpo pra virar URL:
    - limpa acentos e transforma em letra normal
    - limpa cedilha e transforma em c normal, o mesmo com o ñ
    - transforma espaços em hifen (-)
    - tira caracteres invalidos
    by Micox - elmicox.blogspot.com - www.ievolutionweb.com
    */
    //desconvertendo do padrão entitie (tipo á para á)
    $texto = html_entity_decode($texto);
    //tirando os acentos
    $texto= preg_replace('![aáàãâä]+!u','a',$texto);
    $texto= preg_replace('![eéèêë]+!u','e',$texto);
    $texto= preg_replace('![iíìîï]+!u','i',$texto);
    $texto= preg_replace('![oóòõôö]+!u','o',$texto);
    $texto= preg_replace('![uúùûü]+!u','u',$texto);
    //parte que tira o cedilha e o ñ
    $texto= preg_replace('![ç]+!u','c',$texto);
    $texto= preg_replace('![ñ]+!u','n',$texto);
    //trocando espaço em branco por underline
    $texto = eregi_replace('( )','-',$texto);
    //tirando outros caracteres invalidos
    $texto= preg_replace('![a-z0-9\-]+!u','',$texto);
    //trocando duplo espaço (hifen) por 1 hifen só
    $texto = eregi_replace('--','-',$texto);

    return strtolower($texto);
    }

    ResponderExcluir

Resultado! Concursos