Normalmente, quando estamos desenvolvendo aplicações em php, estamos sempre testando códigos que precisam imprimir alguma informação na tela, e como é código rápido sempre nos esquecemos que os caracteres acentuados vão ficar aquelas coisas horríveis.
Depois de muito tempo sofrendo com as incompatibilidades do PHP, Mysql e Ajax para lidar com UTF-8, eu descobri várias artimanhas simples para resolver meus problemas, e que hoje se constituem um verdadeiro arsenal para eu colocar nos projetos que volta e meia estou fazendo.
Quando eu estava criando um script de testes eu me pegava colocando a tag meta antes de abrir o PHP:
<meta charset="utf-8" />
<?php
...
Foi quando pela primeira vez foi olhar no PHP.INI e ver se tinha alguma coisa que definisse o charset padrão do PHP, e para qual surpresa minha, tem!
E o mais gozado, é que é PHP_INI_ALL, ou seja, eu posso configurar meus scripts também, além do arquivo php.ini, usando a funcao ini_set():
<?php
ini_set( 'default_charset', 'utf-8');
Bom, com isto, estou resolvendo um zilhão de problemas bestas!
E mais interessante é que se eu fizer isto:
<?php
ini_set( 'default_charset', 'utf-8');
?>
<meta charset="iso-8859-1" />
O PHP vai dar preferência ao default_charset.
Agora já era dor de cabeças com imcompatibilidades, já vou direto colocando um charset no ini_set() e como faço um monte de include() para os meus testes, nem minhas aplicações e sites ou testes terão caracteres estranhos me azucrinando!
Besteira, mas ajuda!
6 respostas em “Trocar a Codificação de Caracteres Padrão do PHP – Problemas com UTF-8”
Charset utf-8 com ajax ? receita certa pra dar problema.
Algumas vezes nem mesmo a declara??o header resolve.
Depois de muito apanhar, eu descobri que ? preciso alterar a codifica??o do arquivo em si. Por exemplo, um arquivo .php com header utf-8, por?m gravado sob a codifica??o ansi, dar? problema.
Duas fun??es que ajudam muito nos ajax da vida s?o utf8_encode() e utf8_decode()
Bem.
Se eu lhe contar que j? faz mais de anos que n?o uso utf8_encode() e utf8_decode(), tem gente que n?o acreditaria!
Se voc? for utilizar editores como notepad++, notepad, dreamweaver, eclipse, aptana, etc, por padr?o eles vem com ANSI,
pois estas ferramentas s?o desenvolvidas no exterior e eles n?o precisam de acentua??o.
J? no Brasil, utilizamos devemos utilizar UTF-8.
Linux por padr?o usa UTF-8.
O uso de ISO ? diretamente relacionado com alguns programadores antigos e empresas conservadoras!
J? se foi o tempo de limitar as coisas s? pra fazer charme!
Mas, sim, se voc? estiver usando outra codifica??o ? claro que UTF-8 != ANSI e vai gerar caracteres estranhos.
O problema est? no fato de o PHP vir por padr?o com a codific?o ISO e a dica a cima t? valendo!
Muito boa a sua dica, tentei isso no Codeigniter e deu certo. Obrigado. Mesmo eu configurando o Eclipe para UTF-8, as Controllers estavam nascendo como UTF-8 (SEM BOM) e se eu chamasse um ECHO dentro da Controller, para testar , o texto com acento aparecia desconfigurado, sendo assim , para eu converter em apenas UTF-8 eu teria que abrir o notepad++ e ir no menu Format. A sua dica resolveu todos os problemas …
oi pessoal tudo bem?
eu estou usando um script de afiliados que usa essa codificação ANSI que esta charset=iso-8859-1 so que fica dando loop de redirecionamento então pedi ajuda pelo suporte da minha hospedagem e ele disse que meus arquivos estao codificados em ANSI que tenho que colocar eles em UTF-8 w/ o BOM para funcionar mais como faço isso? vcs podem me ajudar ?
Por algum motivo muito estranho o PHP em suas versões 5.6 e 7 em diante apesar de usar no php.ini um defalt_charset como utf-8 não suporta o próprio utf-8, para evitar os erros na acentuação tenho que utilizar utf8_encode() ….
Cara, eu não programa. Meu conhecimento e limitadíssimo na área. Sou servidor público, as vezes preciso usar algum recurso instalado em um servidor local… Há tempos venho apanhado com isso, e agora você trouxe a luz de que eu precisava. Obrigado, sou muito grato a você!!!