Ó, 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.
Opa, so lembrando que em questão de otimização de desempenho para buscadores, é melhor "-" do que "_"
ResponderExcluirMas muito boa função
:)
Caracas, não sabia.
ResponderExcluirValeu otavio.
Vou alterar agora então.
Amigo,
ResponderExcluirBacana 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/
Opa Micael,
ResponderExcluirA situação é a mesma :)
Eu, inclusive, cito o post do cardoso no meu texto.
Não há uma classe posix para pontuação? tipo [[:punct:]] o que pouparia algumas linhas de código?
ResponderExcluirNão sei se a classe posix "punct" engloba caracteres acentuados mas vale uma pesquisada, veja também algo sobre expressões regulares aqui
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@voyag3r
ResponderExcluirOpa 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.
Pow..muito bom em micao!
ResponderExcluirvc é o cara! hehehe
abs!
Muito show cara, mas so lembrando underline é o _ o - é hífen.
ResponderExcluirabrçs
haeuhhu, valeu pelo lembrete. Só esqueci de alterar nos comments do script heheh
ResponderExcluirFunção otimizada pra utf-8
ResponderExcluirfunction 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);
}