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:

1
2
3
4
5
6
7
8
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!

7 Responses to “PHP: Normalizar string para usar na URL amigável/dinâmica”

  1. Atualizei, deixando o código mais limpo e com menos variáveis. :)

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

  3. Willians, é por causa da codificação. Remova os acentos antes de usar a URL dinamica, ok? ;)

  4. Muito bom Diogo parabéns, seu blog esta me ajudando muito

  5. Valeu João, se quiser mandar umas camisetas, fique a vontade!! ;D

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

  7. Juan, isso é problema de codificacao. UTF* e cia… verifica isso! :)

Leave a Reply