Ir para conteúdo

POWERED BY:

Arquivado

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

ronza

Url amigavel e banco de dados

Recommended Posts

Alguém tem uma função diferente dessa pra acentuação e caracteres especiais?

 

Pq essa tranforma Hamburgão em Hamburgaao, Imóveis em Imaoveis, e por aí vai!

 

Queria alguma que só tirasse a acentuação mesmo, por exemplo: Imóveis para Imoveis.

 


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

 

Ninguém pode ajudar??

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta essa aqui:

 

 

function fazLink( $string ){
$string = trim($string);

$string = preg_replace("/[áàâãª]/i","a",$string);
$string = preg_replace("/[éèê]/i","e",$string);
$string = preg_replace("/[íìî]/i","i",$string);
$string = preg_replace("/[óòôõº]/i","o",$string);
$string = preg_replace("/[úù]/i","u",$string);
$string = preg_replace("/[ç]/i","c",$string);
$string = preg_replace("/[\/,()]/i","",$string);

$string = str_replace("  ","-",$string);
$string = strtolower($string);

$string = preg_replace('/[^a-z0-9\.]/i', '-', $string);

return $string;
}

qndo for assim, posta na área de php. :lol:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Refiz a sua função usando a do Will. Funcionou 100%

 

Acredito que a sua base de dados (txt, php ou mysql) esteja em UTF8.

Você está usando Mysql?

Se sim, você está usando latin1 ou UTF-8 nela?

Qual codificação você está usando no PHP?

 


  •  
  • Quando usar UTF-8 no Mysql use UTF-8 no header do PHP e UTF-8(Sem bom) no documento (na hora de salvar no bloco de notas ou Dreamwaver)
  • Quando usar latin1 no Mysql use iso-8859-1 no header do PHP e ANSI no documento (na hora de salvar no bloco de notas ou Dreamwaver)

 

<?php
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 = preg_replace('#[aáàãâäª]#i','a',$texto);
$texto = preg_replace('#[eéèêë]#i','e',$texto);
$texto = preg_replace('#[iíìîï]#i','i',$texto);
$texto = preg_replace('#[oóòõôöº]#i','o',$texto);
$texto = preg_replace('#[uúùûü]#i','u',$texto);

//parte que tira o cedilha e o ñ
$texto = preg_replace('#[ç]#i','c',$texto);
$texto = preg_replace('#[ñ]#i','n',$texto);

//trocando espaço em branco por underline
$texto = preg_replace('#( )#','-',$texto);

//tirando outros caracteres invalidos
$texto = preg_replace('#[^a-z0-9\-]#i','',$texto);

//trocando duplo espaço (underline) por 1 underline só
$texto = preg_replace('#--#','-',$texto);

return strtolower($texto);
}
echo geraUrlLimpa('Hamburgão');
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não deu tb.

 

No echo dá certo, mas quando resgata do banco de dados não.

 

E o pior é que a palavra ta igualzinha tanto no banco de dados como no echo!

 

Não dá pra entender!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não deu tb.

 

No echo dá certo, mas quando resgata do banco de dados não.

 

E o pior é que a palavra ta igualzinha tanto no banco de dados como no echo!

 

Não dá pra entender!

Foi exatamente o que eu perguntei, perguntarei de outra maneira:

 


  •  
  • Qual o formato que você está salvando os documentos (até os que estão no includes)? ANSI, UTF-8, UTF-8-sem-bom ?
  • Tem certeza que todos documentos foram salvos no mesmo formato?
  • Qual formato do banco você está usando latin1 ou utf-8?

 

Resposta nesta ordem por favor. Uma boa tarde Ronza

Compartilhar este post


Link para o post
Compartilhar em outros sites

os includes eu deixo sem nada, só com a estrutura mesmo!

 

Você não entendeu, eu perguntei se você salvou os includes com utf8-sem-bom, veja como salvar usando o Notepade++ (lembre-se ou você usa todos documentos em ANSI ou em UTF8, assim evita confusões):

imagemyra.png


Faça o seguinte teste no teu PHP também:

echo $linha['coluna'];
echo '<br>';
echo geraUrlLimpa($linha['coluna']);

Poste aqui os resultados.


Outra pergunta você está usando no mysql o collection utf8_general_ci ???

 

Notepade++ download: http://notepad-plus-plus.org/download/v6.2.2.html

 

Descobri, eu havia me esquecido que em utf8 uma letra com acento vale por dois caracteres, o que me confundiu é que você disse que tinha salvo os documentos em utf8-sem-bom, mas se tivesse salvo mesmo teria ocorrido o mesmo problema de duplicar a letra.

 


Editado:

 

veja a função modificada e corrigida usando utf8_decode:

 

<?php
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_decode(html_entity_decode($texto));

       //tirando os acentos
       $texto = preg_replace('#[aáàãâäª]#i','a',$texto);
       $texto = preg_replace('#[eéèêë]#i','e',$texto);
       $texto = preg_replace('#[iíìîï]#i','i',$texto);
       $texto = preg_replace('#[oóòõôöº]#i','o',$texto);
       $texto = preg_replace('#[uúùûü]#i','u',$texto);

       //parte que tira o cedilha e o ñ
       $texto = preg_replace('#[ç]#i','c',$texto);
       $texto = preg_replace('#[ñ]#i','n',$texto);

       //trocando espaço em branco por underline
       $texto = preg_replace('#( )#','-',$texto);

       //tirando outros caracteres invalidos
       $texto = preg_replace('#[^a-z0-9\-]#i','',$texto);

       //trocando duplo espaço (underline) por 1 underline só
       $texto = preg_replace('#--#','-',$texto);

       return strtolower($texto);
}

echo geraUrlLimpa('Hamburgão');
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu testei e saiu assim dessa vez: "Hamburgo"

 

todas as palavras com acento sumiram da url!

 

Complicado né.. hahahaha

Me desculpe a sinceridade, mas quem está complicado é você hehehehe. É sério cara tenho certeza que você está falhando em algum desses pontos: salvar documento ou estrutura mysql e você não postou nenhum dos testes que eu pedi, o que dificulta você ajudar-nos a ajuda-lo.

 

Acredito que mesmo que o seu SQL seja UTF8 o dados foram inseridos em ISO-8859-1 por causa do seu site (pode ser o motivo).

 


 

Responda nessa ordem:

1 - Seu navegador identifica qual charset (codificação selecionada)?


2 - Tente este código e poste aqui (esse teste ajudará a saber se os dados foram inseridos corretamente no seu BANCO DE DADOS):

echo $data['EXEMPLO'];//váriavel vinda do seu banco de dados
echo '<br>';
echo 'áàãé';//dados no documento


3 - Verifique todas os documentos PHP se foram salvos em UTF8-sem-bom, veja como fazer com notepade++:

imagemyra.png

 

 


Responda exatamente do jeito que lhe perguntei, por que se você continuar a dar respostas vagas não conseguiremos identificar o seu problema amigo. Espero que entenda o que eu disse, só quero lhe ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Essas funções funcionam perfeitamente comigo, pra alguém que ainda tenha algum problema ^^
$novaString = retiraAcentos("Livros universitários com desconto progressivo.");//vai retirar os acentos
$novaString2 = preparaUrlCat("E-mails da Saraiva");//vai retornar e-mails-da-saraiva

$novaString3 = acentosIso("Livros Universitários, veja condições");//vai retornar Livros Universitários, veja condições

 

 

<?php
function retiraAcentos ($texto){
$arrayAcentos = array("á", "à", "â", "ã", "ä", "é", "è", "ê", "ë", "í", "ì", "î", "ï", "ó", "ò", "ô", "õ", "ö", "ú", "ù", "û", "ü", "ç", "Á", "À", "Â", "Ã", "Ä", "É", "È", "Ê", "Ë", "Í", "Ì", "Î", "Ï", "Ô", "Ó", "Ò", "Ô", "Õ", "Ö", "Ú", "Ù", "Û", "Ü", "Ç");
$arrayNormal = array("a", "a", "a", "a", "a", "e", "e", "e", "e", "i", "i", "i", "i", "o", "o", "o", "o", "o", "u", "u", "u", "u", "c", "A", "A", "A", "A", "A", "E", "E", "E", "E", "I", "I", "I", "I", "O", "O", "O", "O", "O", "O", "U", "U", "U", "U", "C");
return str_replace($arrayAcentos, $arrayNormal, $texto);
}
function preparaUrlCat ($textoCat){
$arrayEspeciais = array("´", "`", "^", "~", "¨", "*", "_");
$arrayNormalEsp = array("", "", "", "", "", "", "");
$textoCat = str_replace($arrayEspeciais, $arrayNormalEsp, $textoCat);
$textoCat = str_replace(".","",$textoCat);
$textoCat = str_replace(" ", "-", $textoCat);
return strtolower($textoCat);
}
function acentosIso ($textoIso){
$arrayAcentos = array("á", "à", "â", "ã", "ä", "é", "è", "ê", "ë", "í", "ì", "î", "ï", "ó", "ò", "ô", "õ", "ö", "ú", "ù", "û", "ü", "ç", "Á", "À", "Â", "Ã", "Ä", "É", "È", "Ê", "Ë", "Í", "Ì", "Î", "Ï", "Ô", "Ò", "Ô", "Õ", "Ö", "Ú", "Ù", "Û", "Ü", "Ç");
$arrayNormal = array("á", "à", "â", "ã", "ä", "é", "è", "ê", "ë", "í", "ì", "î", "ï", "ó", "ò", "ô", "õ", "ö", "ú", "ù", "û", "ü", "ç", "Á", "À", "Â", "Ã", "Ä", "É", "È", "Ê", "Ë", "Í", "Ì", "Î", "Ï", "Ó", "Ò", "Ô", "Õ", "Ö", "Ú", "Ù", "Û", "Ü", "Ç");
return str_replace($arrayAcentos, $arrayNormal, $textoIso);
}
?>

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.