Há alguns meses atrás estava desenvolvendo uma aplicação em php. Depois de finalizado fiz todos os testes em meu servidor apache local e aparentemente estava tudo certo. Porém quando eu subi o projeto para o host da hospedagem verifiquei que todas as palavras com acentuação especial(til, cedilha, circunflexo, etc.) eram exibidas de maneira desconfigurada. Percebi que isso acontecia devido à codificação padrão do servidor e a do meu projeto, que eram diferentes. E essas compatibilidades (ou a falta delas) entre as codificações iso-8859-1 e utf-8 podem acabar gerando muita “dor de cabeça” para programadores.
Certo. Mas o que e como fazer então?
Bom, primeiramente eu aconselho a sempre desenvolver em utf-8.
Mas e se o servidor não estiver configurado por padrão para essa codificação?
Simples. Para resolver isso você não precisa solicitar ao seu provedor de hospedagem alguma alteração nas configurações do servidor. Você poderá definir o utf-8 no seu próprio projeto.
No próprio cabeçalho HTML de seus documentos você pode fazer isso. Veja:
1 2 3 4 5 6 7 8 | <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> </body> </html> |
Na linha 4 eu defini que o documento deverá respeitar a codificação utf-8.
Porém não é 100% das vezes que o servidor aceita essa instrução HTML e continua “desconfigurando” caracteres especiais.
Em casos assim, ao invés de definir a codificação pelo cabeçalho HTML, defina através da função ini_set do próprio php.
1 2 3 | <?php ini_set('default_charset','UTF-8'); ?> |
Pronto! Agora você pode fazer o upload de seus arquivos sem se preocupar.
Mas não se esqueça de declarar o charset antes de qualquer outra coisa. Isso evita erros de headers.
Abs.
Siga-me no twitter: @rafaelwendel
O Problema mesmo é essa m… de idioma Portugues rs
Obrigado pela informação. Muito bom
Valeu deu certo mesmo. Agora tá acentuando perfeito!
Me ajudou bastante, depois de 2 horas tentando descobrir isso, achei a solução, simples e funcional. No meu caso, o site foi feito em utf8 e o provedor estava em outro formato, então só funcionou utilizando a função ini_set do próprio php. Abração e obrigado!
Estou com problemas, pois meu banco é oracle e está em ISO-8859-1, E EU TENHO QUE INSERIR DADOS NO BANCO, JÁ MUDEI PARA UTF-8, POREM ELE JOGA CARACTERES ESPECIAIS NA HORA QUE DOU O REQUEST DO FORMULARIO, ANTES DE JOGAR NO BANCO, VC PODE ME AJUDAR.
Olá telma,
É interessante manter o banco de dados e a aplicação com a mesma codificação para não dar problemas na hora de inserção e recuperação de dados.
Veja se consegue deixar tudo padronizado.
Abs!
Belo código funcionou perfeito parabéns
Muito obrigado, sua dica resolveu meu problema, valew mesmo..
Muito boa a sua dica Rafael! Estou começando a estudar PHP e me surgiu esse problema, valeu cara.
Poisé, eu não tive a mesma sorte. No meu caso, nenhuma das soluções resolveram.
obs: Na minha página, existem vários momentos . Devo colocar o ini_set
em todas ou basta na primeira ?
O meu site de hospedagem é o Hostinger.
Abç
Olá Marcelo,
Você deve colocar em todas as páginas.
Se você utiliza algum framework ou o seu projeto carrega todos os arquivos a partir do index.php por exemplo, aí basta colocar nesse único arquivo.
Abs!
Funcionou perfeitamente. Obrigado pela ajuda amigo.
Olá Rafael, no meu caso na página funcionou perfeitamente mas quando utilizo o formulário para envio, chega no e-mail do cliente todo desconfigurado! O que poderia ser isso??
Olá Marcos,
Para resolver esse problema utilize a função utf8_decode. Ex:
Abs!
Somente isso que comentou resolveu meu problema pra programar minha própria quebra de linhas.
meu site e em CMS, wp.
So que coloquei nele um form em PHP nao nativo
tratado por uma pagina externa.
na hora que envio chega com os caracteres deformados.
Por favor, amigos, onde eu posso mexer para que o form mailchegue com acentuacao certa no email do cliente?
Obrigado Rafael. Finalmente graças a este detalhe você salvou meu dia. Agora é só criar uma função ou classe de correção dos acentos. 🙂 thank you.
Olá Rafael, valeu pela dica, passei vários meses com problema no meu site e somente quando encontrei o seu artigo, consegui resolve.
Olá! Rafael… tô com um problema que está tirando meu sono.
Minha consulta não retorna os registros que contenham çÇ. Os demais acentos ele acha sem problema, procuro método ou metodo e ele encontra os registro com esta palavra acentuada ou não… mas o cedilha não tem jeito. Tem idéia do q seja?
Abaixo algumas informações.
Agradeço se puder ou não me ajudar.
Seu Post foi muito útil.
Milene
Collation de conexão do MySQL utf8_general_ci
Conjunto de caracteres MySQL: UTF-8 Unicode (utf8)
nas páginas:
Formato do DW6:
Encoding: Unicode (UTF-8)
Unicode Normalization Form: None
Include Unicode Signature (BOM) desclicado.
Olá Milene,
Estranho nao aparecer somente o Ç hein? Geralmente ou dá erro em tudo ou não dá erro em nenhum.
Mas tenta definir os arquivos PHP na codificação UTF-8 sem BOM. Pode ser que resolva.
Abs!
como definir o
charset’
Boas estou com um grande problema com a acentuação do meu pequeno site.
uma pagina Html com:
Nome input type=”text”;
Data saída input type=”text” com um calendario Dojo;
Cancelar número de telefone : Sim Não (RadButton);
Cancelar placa de dados : Sim Não (RadButton);
Outros : (textarea).
recebo os valores de todos dos campos num PHP, os dados exibidos no ficheiro php ficam corretos quando e efectuado o echo. o problema e quando crio um file .txt, tambem ja exprimentei num .html ele nao converte os acentos.
Assim quando envio o file (txt ou html) num script de powershell, quando é recebido no email aparece sem acentos, mais propriamente as letras com acentos nem aparecem, veem em pontos de interrogação (?)
Alguem me da uma ajuda
Olá Diogo,
Para resolver esse problema tente a utilização da função utf8_decode. Ex:
Abs!
Olá Rafael,
Estou com um problema de acentuação no e-mail que recebo da página de Contato do meu site. Em todo o site os caracteres acentuados aparecem normalmente. Quando o cliente preenche os campos da página de Contato também fica tudo acentuado. Porém no e-mail que recebo, os caracteres acentuados e o cedilha vem todos errados.
Já tentei as soluções que você apresentou acima e nada funcionou, ou só se eu é que estou fazendo alguma coisa errada. Estou listando as primeiras linhas dos meus arquivos HMTL e do PHP. Peço-lhe a gentileza de dar uma olhadinha e se notar alguma coisa errada, por favor corrija ou me indique o que fazer:
Arquivo PHP:
<?php
$date = date("d/m/Y h:i");
ini_set('default_charset','UTF-8');
$msg_email = utf8_decode('Olá mundo éçãõ');
Nas páginas HTML começa assim:
Estou desesperado… risos
Muito obrigado por qualquer ajuda ou dica.
Atenciosamente,
Lisandro
Olá pessoal,
Depois de inúmeras tentativas, acabei conseguindo, utilizando as dicas que obtive em diversos sites na internet.
No PHP, coloque como a primeira linha:
header(“Content-Type: text/html; charset=UTF-8”, true);
Nos HTML, coloque após :
Pode parecer meio estranho uma hora estar charset=UTF-8 e outra hora estar charset=iso-8859-1 mas foi somente exatamente assim que funcionou para mim. Até a linha de assunto vem corretamente acentuada!
Espero poder ter ajudado outros colegas.
Valeu,
Valeu pela força Lisandro.
Com certeza irá ajudar muitos leitores do blog.
Abs!
Estou colocando isso:
Se eu tiro o :
dá erro quando eu chamo o PHP do banco de dados e o html fica correto,porém se eu coloco, dá erro no html e o PHP fica correto. Como fazer para php e html ficarem corretos?
Se eu tiro
Bom dia Pessoal,
Este tutorial acabou de ser muito prestável, ja tenho meu problema de lingua portuguesa resolvido.
Agora gostaria de ter vossa ajuda como activar as base de dados para os sub-dominios en.uakidi.com.
DS
Ok Rafael Wendel, resolveu o meu problema Obrigado
Muito obrigada pela dica…Consegui resolver meu problema
Muito obrigado, consegui resolver som suas dicas.
Excelente!
Muito obrigado pela solução.
Abs.
Obrigado parceiro, me salvou
Olá Rafael, utilizei sua dica e os dados do formulário no corpo da mensagem chegam com os acentos reconhecidos, tive que utilizar $variavel = utf8_encode($variavel); no campo “assunto” do cabeçalho do e-mail pois somente com a declaração na abertura do php não rolou, mas os campos que tem “combobox” não funcionam mesmo, todos os dados vem com “?” no lugar dos acentos… Você teria alguma solução pra isso? Obrigada!
Olá Camila,
Geralmente a regra vale para tudo na página. Estranho dar erro somente no combo. Você configurou com utf-8 o cabeçalho do HTML também?
Abs!
Boa tarde!
Me chamo Márcio Henrique Muzy Freitas, sou estudante de sistema de informação e programador júnior, estava num galho no sistema do TCC e o seu blog me ajudou e resolver esse galho, obrigado!
Olá Márcio,
Que bom que o conteúdo que compartilho aqui pôde te ajudar. Essa é sempre minha intenção.
Grande abraço e sucesso nos estudos!
Obrigada Rafael!
Estava com problemas no formulário de contato e consegui resolver com suas dicas.
Bom dia.
Será que vc pode me ajudar?
Tenho um formulário (montado no asp clássico) que está codificado com iso-9959-1.
Uma página php (hospedada em outro servidor) recebe os dados deste formulário.
Quando faço o request dos campos do formulário, eles vêm com símbolos e não consigo pegar o texto digitado no formulário corretamente.
Não sei mais o que tentar….
Obrigada
esqueci de uma informação: a página php que recebe os dados está em utf-8.
Já tentei trocar para iso-8959-1 mas não adiantou.
Obrigada
Sou novato, estava procurando algumas dicas aqui na net e tentei a de vocês mas não consegui.
Um amigo me passou um linha simples para ser acrescentada e deu certo.
Linha que já tinha no form —-> $mail = new PHPMailer;
Acrescentei logo abaixo —-> $mail -> CharSet = ‘UTF-8’;
Funcionou perfeitamente.
Pode ser que a dica que passaram esteja certa mas eu não consegui usar ok? 🙂
Oi!
Estou desenvolvendo um sistema com Laravel e utilizando uma biblioteca para criar imagens. Ao criar as imagens, os acentos desconfiguram. É sabido que o servidor está em ISO-8859-1, mas já tentei colocar o ini_set( ‘default_charset’, ‘UTF-8’); e de nada adiantou. Tentei colocar até mesmo no index.php, já que o Laravel utiliza deste arquivo para carregar rotas e etc.
Não sei o que fazer para solucionar o problema.
Obrigado!
Bom dia Rafael,
Tenho 5 arquivos em php, sendo o de conexao.php com o bd, o form-bd.php, form-processamento.php, form-cadastro, form-listagem.
Ao abrir o form-listagem, a relação dos textos que tem acentuação, aparecem com uma interrogação. Coloquei a linha de código que foi informado, mas não funcionou. Onde pode ser o erro?
Eu mudei um sistema que comprei de um host para outro, mas agora no novo ele fica aparecendo os caracteres especiais.
Posso pedir para o novo host (hostgator) mudar alguma configuração?
Grato pelo ajuda
mano você resolveu meu problema e ao mesmo tempo bugou meu site com esse código ae. obrigado.
Olá estou com um problema:
Estou pegando dados da minha database porém, tudo vai certo menos os acentos, eles mudam para outras caracteres e mesmo colocando esse codigo ainda não funciona.
Me ajuda.
Cara, essa foi a única solução que deu certo, já tinha tentando todas as sugestões em sites diferentes. Obrigado!