PHP: Normalizar string para usar na URL amigável/dinâmica

A tempos atras aqui mesmo no blog, postei um artigo ensinando a Como fazer URLs amigaveis com .htaccess e php. Entretanto, para ficar mais completo, você pode incrementar a função abaixo:


function NormalizaURL($str){
$str = strtolower(utf8_decode($str)); $i=1;
$str = strtr($str, utf8_decode('àáâãäåæçèéêëìíîïñòóôõöøùúûýýÿ'), 'aaaaaaaceeeeiiiinoooooouuuyyy');
$str = preg_replace("/([^a-z0-9])/",'-',utf8_encode($str));
while($i>0) $str = str_replace('--','-',$str,$i);
if (substr($str, -1) == '-') $str = substr($str, 0, -1);
return $str;
}

ela fará que uma string se torne uma URL amigável, ou seja, de fácil leitura humana e dos buscadores (SEO).

Por exemplo, você tem uma noticia com o titulo:
Rihanna toma caipirinha, come picolé, tatua braço e faz castelo na areia no RJ

Ao passar pelo codigo, ira retornar:
rihanna-toma-caipirinha-come-picole-tatua-braco-e-faz-castelo-na-areia-no-rj

Agora é so montar a url como desejar, por exemplo:
http://seudominio.com.br/2134/rihanna-toma-caipirinha-come-picole-tatua-braco-e-faz-castelo-na-areia-no-rj.html

Onde, seudominio é o seu domínio, 2134 seria o ID da matéria no banco de dados, e o restante apenas uma mascara para indexação nos buscadores. ;)

Have Fun!

19 comments

  1. Olá Diogo,
    Primeiramente obrigado pelo post, segundo: Você sabe me dizer o porque no meu script as letras com acento estão sumindo?

  2. Diogo , Tudo bom ?
    Diogo não estou conseguindo tirar os acentos , e dar esse erro ??????? onde tem os acentos o que está errado ?

  3. Inverno, exatamente para eliminar essa url foi escrito este post

  4. Diogo,
    Segui o post anterior e este post, mas não funcionou por aqui.
    A URL é do tipo “/noticia.php?id=x” e eu já utilizava como “/noticia/x”.
    A função que cria a URL funciona normalmente, mas so obtive erros.
    Como ficaria o .htaccess nesse caso?

  5. Marcelo, depende dos seus erros. O que esta acontecendo?

  6. Olá Diogo!! realmente seu artigo foi muito bom e estou utilizando muito!!!! Porém me deparei com um problema em uma URL que contém acento e cedilha no lugar dos dois ele coloca um traço como no exemplo abaixo.

    http://www.meudominio.com/Cliente/vilmar-representa-es-telhas-rainha/1911.html

    sendo que o correto a da URL seria esta
    http://www.meudominio.com/Cliente/vilmar-representacoes-telhas-rainha/1911.html

    não sei o que poderia ser tens ideia do que é?

    Desde já agradeço a sua atenção e ao código disponibilizado!!

    Abraços.

    Douglas Matos.

  7. Como dito anteriormente pelo Dourado… o lance dos caracteres acentuados é problema das “UTF* e cia”
    Desta forma, tentem alterar as duas primeiras linhas da função para:

    $str = strtolower(utf8_decode($str)); $i=1;
    $str = strtr($str, ‘àáâãäåæçèéêëìíîïñòóôõöøùúûýýÿ’, ‘aaaaaaaceeeeiiiinoooooouuuyyy’);

    Grande abraço Dourado!
    E mais uma vez… baita script =)

  8. Já testei quase todos os scripts da net, e esse foi o que chegou mais perto.. Mas ainda está com o problema de remover os caracteres com (ç) e (ã) etc.. já alterei as linhas conforme o Zanette e nada tbm. alguma outra ideia?

  9. Amigo boa tarde. O meu filho fez um portal de notícias em php, porém a url não está amigavel. Como ele está morando em outra cidade e muito ocupado eu mesmo resolvi fazer algumas alterações nos código php e uma das mudanças que pretendo realizar é essa. Sou analista de sistema mas nunca programei em php e estou apanhando e muito. No caso desse teu exemplo em que lugar do código ele deverá ficar e outra coisa, é apenas esse código que você postou ou tem mais algumas outras funções e/ou rotinas pra fazer funcionar?

    Agradeço

  10. Walter, essa parte é apenas do PHP, tem o htaccess que voce deve configurar. No post eu coloquei o link la. Procura por REWRITE que acha muita coisa legal.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.