Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ronza

[Resolvido] acento em url amigavel

Recommended Posts

Fala galera beleza?

 

No meu código de url amigável, quando resgato do banco de dados uma palavra acentuada fica assim:

 

Hamburgão -> Hamburgaao

 

eu queria que ficasse somente hamburgao, teria como?

 

Esta é a função que eu uso:

 


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
       */
       //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);
}

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

você gera a url amigavel a partir de uma palavra que você resgatou no Banco de Dados??

 

se é isso creio que a codificacao do banco de dados nao esta aceitando os caracteres especiais:

 

utilize o utf8_decode para gravar no banco de dados. exemplo:

 

$nome = utf8_decode($_POST["nome"]);

$sqlinsert = "INSERT INTO clientes (nome) VALUES ('$nome');";

mysql_query($sqlinsert);

 

se eu entendi direito o seu problema acho q isso pode resolver

Compartilhar este post


Link para o post
Compartilhar em outros sites

No banco de dados tá certo João!

 

O problema é que na url não aparece acentos, aí tenho que usar alguma função pra tirar o acento.

 

Só que esta que estou usando acontece isso, entendeu?

 

Verifiquei novamente o banco de dados e realmente não está aceitando caracteres especiais, fica tipo assim: Ãj

 

Não teria outra solução João?

 

Porque tenho muitos registros já no banco de dados!

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera fiz uma gambiarra que deu certo!

 

Quem tiver com problemas iguais aos meus é só usar esta função que eu modifiquei:

 


//url amigavel


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
       */
       //desconvertendo do padrão entitie (tipo á para á)
       $texto = utf8_encode($texto);

	//tirando os acentos

	//problema banco de dados

	$á = 'á'; $à = 'Ã'; $ã = 'ã'; $â = 'â'; $ä = 'ä';
	$é = 'é'; $è = 'è'; $ê = 'ê'; $ë = 'ë';
	$í = 'í'; $ì = 'ì'; $î = 'î'; $ï = 'ï';
	$ó = 'ó'; $ò = 'ò'; $õ = 'õ'; $ô = 'ô'; $ö = 'ö';
	$ú = 'ú'; $ù = 'ù'; $û = 'û'; $ü = 'ü';
	$ç = 'ç';
	$ñ = 'ñ';

	//A

	$texto = str_replace( $á, 'a', $texto); 
	$texto = str_replace( $ã, 'a', $texto); 
	$texto = str_replace( $â, 'a', $texto); 
	$texto = str_replace( $ä, 'a', $texto); 

	//E

	$texto = str_replace( $é, 'e', $texto); 
	$texto = str_replace( $è, 'e', $texto); 
	$texto = str_replace( $ê, 'e', $texto); 
	$texto = str_replace( $ë, 'e', $texto); 

	//I

	$texto = str_replace( $í, 'i', $texto); 
	$texto = str_replace( $ì, 'i', $texto); 
	$texto = str_replace( $î, 'i', $texto); 
	$texto = str_replace( $ï, 'i', $texto); 

	//O

	$texto = str_replace( $ó, 'o', $texto); 
	$texto = str_replace( $ò, 'o', $texto); 
	$texto = str_replace( $õ, 'o', $texto); 
	$texto = str_replace( $ô, 'o', $texto); 
	$texto = str_replace( $ö, 'o', $texto); 

	//U

	$texto = str_replace( $ú, 'u', $texto); 
	$texto = str_replace( $ù, 'u', $texto); 
	$texto = str_replace( $û, 'u', $texto); 
	$texto = str_replace( $ü, 'u', $texto); 


       //parte que tira o cedilha e o ñ
       $texto = str_replace( $ç, 'c', $texto);
       $texto = str_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);

	//A - este fica por ultimo pra não substituir todos por "a"
	$texto = str_replace( $à, 'a', $texto); 

       return strtolower($texto);
}


Compartilhar este post


Link para o post
Compartilhar em outros sites

Só recomendo trocar eregi_replacREGEX') por preg_replace('#REGEX#i')

 

É fácil, troque isso, por exemplo:

eregi_replace('[^a-z0-9\-]','',$texto);

 

por isso:

preg_replace('#[^a-z0-9\-]#i','',$texto);//#i serve para fazer aceitar maiúsculo e minusculo.

 

ereg_replace e eregi_replace estão em desuso e em breve são serão mais disponíveis.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela dica Silverfox!

 

Este código que eu editei, não funciona para palavras maiúsculas acentuadas.

 

É melhor configurar a codificação e a conexão com o banco de dados e utilizar o primeiro código que postei com as alterações sugeridas pelo Silverfox.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.