Ir para conteúdo

POWERED BY:

Arquivado

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

Kineri

PHP, MySQL e Acentos

Recommended Posts

Saudações,

 

Cenário: Estou criando um sistema de galeria de fotos, onde o usuário entra no painel admin, cadastra um evento e faz o upload das fotos.

 

Problema: Se o usuário usar caracteres acentuados (á, é, õ etc), eles irão ficar exatamente assim no banco de dados e, quando eu der um SELECT e receber esses dados para listar os eventos cadastrados, esses caracteres virão exatamente assim, causando a aparição de símbolos estranhos no lugar dos acentos.

 

Dúvida: Como posso evitar isso? Transformando os acentos em entities? "Forçando" o HTML a exibir eles de algum jeito?

 

Vi algumas coisas sobre as funções htmlentities() e html_entity_decode() do PHP mas elas não me ajudaram (ou eu usei incorretamente).

 

Aguardo Respostas,

 

o/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já tive muito problema com caracteres. Inicialmente usava latin no banco e ISO-8859-1 nas páginas, mas direto quando precisava usar ajax, ficava tudo zuado.

 

Minhas dicas:

 

- Deixe a codificação do arquivo como UTF-8 without BOM (uso o programa Notepad++)

- No começo dos arquivos user

header('Content-type:text/html; charset=utf-8', true);
- No banco use como utf8_general_ci

 

Ve ai se ajuda,

 

Abçs!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Siga a dica do " hao"

 

O importante é manter sempre a mesma codificação em todos os arquivos (tanto nos cabeçalhos quanto nas tags HTML) e no banco de dados. Pode ser utf-8 ou latin1/iso. Mas prefiro utf-8, que é o padrão que vem sendo adotado mundialmente

 

 

Talvez este link ajude também:

http://www.rberaldo.com.br/blog/2009/11/06/problemas-com-codificacao-acentos-nao-interpretados/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sobre esses tipos de charsets, como posso arrumá-los? as páginas eu edito com dreamweaver e o mysql trabalho no phpmyadmin

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, troquei TUDO pra UTF-8 (ressalvei meus arquivos, coloquei o cabeçalho HTML/PHP, modifiquei a database, as tabelas e os dados do mysql p/ utf8_bin (era a mais plausível no painel do phpmyadmin)) mas meus acentos continuam aparecendo como quadrados.

 

No mysql, o que está como acento literal (á, é etc) aparece como esse quadrado. Já o que está como entity (á, é etc) aparece corretamente.

 

Faltou eu fazer alguma coisa?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera, consegui resolver meu problema da seguinte maneira:

 

Depois de trocar tudo para UTF-8, com disse acima, me deu aqueles famosos "cinco minutos" e eu resolvi tentar a função htmlentities() no retorno do banco de dados.

 

O que estava assim:

echo("$variaveldobdcomacentos");

 

Ficou assim:

 

echo(htmlentities("$variaveldobdcomacentos"));

Com isso, meu problema foi sanado.

Mentira. Isso funcionou com os dados que já estavam no MySQL. Quando eu adiciono mais coisas com acento, pela página de cadastro, os acentos estão chegando totalmente errados no BD.

 

Seria problema de encodes e etc?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não adianta só mudar o charset. O ideal é recadastrar os dados em novos campos, criados já com a codificação UTF-8.

 

Verifique se o banco, as tabelas e os campos estão na mesma codificação. às vezes a tabela está numa codificação e o campos, em outra.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já conferi isso. Eu mesmo mudei tudo: database, tabelas e dados para utf8_bin

 

o que voce sugeriu aí em cima é recriar a tabela no bd?

Compartilhar este post


Link para o post
Compartilhar em outros sites

o que voce sugeriu aí em cima é recriar a tabela no bd?

 

sim. Só mudar a codificação pode não ser suficiente. Você cria as novas tabelas, transfere os dados e apaga as antigas. Tudo isso com comandos SQL, sem grandes dificuldades

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok, farei isso quando estiver na máquina com acesso ao BD (ou seja, segunda-feira)

 

Pessoal, depois de muito tempo, eu voltei a mexer nisso.

 

Já criei as tabelas novamente e recoloquei os dados e NADA... ainda continuo comproblemas nos acentos.

 

Alguém tem mais alguma dica?

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok, farei isso quando estiver na máquina com acesso ao BD (ou seja, segunda-feira)

 

Pessoal, depois de muito tempo, eu voltei a mexer nisso.

 

Já criei as tabelas novamente e recoloquei os dados e NADA... ainda continuo comproblemas nos acentos.

 

Alguém tem mais alguma dica?

 

ja passei essa dica pra outro usuario, mas nao lembro do link, então vo falar novamente.

 

após a conexão com o bd coloca mysql_set_charset('utf8',$connection);

 

ou então muda o default charset pra conexões no php.ini. (o padrão é latin1)

 

nao se esqueça de mudar tudo pra utf8. o html, o php.... e anula qualquer utf8_encode() senao o acento nao aparece.

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.