Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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/
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!
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/
Sobre esses tipos de charsets, como posso arrumá-los? as páginas eu edito com dreamweaver e o mysql trabalho no phpmyadmin
Viu o link que passei? A codificação do arquivo é modificada no editor de textos. A codificação do HTML é feita com meta tag e a codificação do banco de dados é feita na SQL mesmo.
Bem, eu utilizo
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
não vejo problema em usar este meta.
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?
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?
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.
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?
>
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
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?
>
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.
Com charset UTF-8, os acentos ficam errados mesmo, não?
(charset seria o único jeito de mudar?)