Trocar a Codificação de Caracteres Padrão do PHP – Problemas com UTF-8

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!

3 comentários sobre “Trocar a Codificação de Caracteres Padrão do PHP – Problemas com UTF-8”

  1. 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()

    1. 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!

  2. 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 …

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *