Corrigindo erros de codificação (acentuação)

imagem de coyote

Boas a todos!

Um problema relatado com certa frequência em fóruns que participo é o de erros na acentuação de textos.

Motivado por um post aqui no Drupal, resolvi colocar essa dica para outras pessoas que passem pelo mesmo problema.

Para que a acentuação e caracteres especiais apareçam corretamente é necessário configurar os 3 ítens abaixo da mesma maneira:

1. a página;
2. o banco de dados;
3. o editor.

Considerando o uso de utf-8 (o mais indicado), como isso deve ser feito ?

1. Na página:

1.1 Definir o idioma (opcional mas recomendado)

  1. <html xmlns="http://www.w3.org/1999/xhtml" lang="pt-br" xml:lang="pt-br">

1.2 definir o charset

  1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

2. No banco de dados (MySql)

2.1 Conjunto de caracteres MySQL: UTF-8 Unicode (utf8)
2.2 Collation de conexão do MySQL: utf8_unicode_ci

3. No editor. IMPORTANTE, aqui é onde aparece muito problema.
Normalmente as pessoas não se ligam na codificação que seu editor usa. Editam o arquivo, salvam e pronto. Ao enviar para o servidor, mesmo estando correto o charset da página e do bd, o erro persiste.
No nosso exemplo, usando utf-8, nosso editor precisa salvar usando utf-8 também.
No Windows normalmente os editores salvam usando iso-8859-1, para não ter problema é necessário identificar onde mudar esse parâmetro e então salvar o arquivo em utf-8.

Um exemplo de como esse pequeno detalhe muda tudo, criei 2 arquivos html idênticos em conteúdo e o charset está setado como utf-8, que pode ser constatado no código fonte da página, porém ao salvar, um foi salvo com iso-8859-1 e outro com utf-8

Veja os exemplos aqui:
charset utf-8, gravado com codificação iso-8859-1
charset utf-8, gravado com codificação utf-8

Vê como muda tudo ? ;)

Segue alguns editores em Windows/Linux e onde mudar essa opção:

Windows (com a colaboração do gutomec- Luiz Gustavo) :D

Dreamweaver:
1 - Para trocar o file encoding vá em Modify>Page Properties... (ou Ctrl+j);
2 - Em Category selecione Title/Encoding;
3 - Selecione em Encoding o que desejar e dê um OK;
4 - Salve o documento.

EditPlus:
1 - Vá em Documents>File Encoding>Change File Encoding;
2 - Vai abrir uma janela pedindo para selecionar o file encoding, selecione o desejade e dê um OK.
3 - Salve o documento.

Linux

Geany
1 - vá em "documento"
2 - selecione "definir codificação"
3 - escolha a codificação desejada

Gedit
1 - vá em "arquivo"
2 - selecione "salvar como"
3 - selecionar na caixa select o código desejado

Eclipse
1 - vá em "preferences
2 - em "editors" procure a opção para definir codificação

Espero que ajuda e qualquer dúvida é só falar.

Abs

Não estou conseguindo com CodeIgniter

Cara faço tudo que você disse mas com o CI não consigo, ja deixei assim:
$config['charset'] = "";

já deixei assim:
$config['charset'] = "iso-8859-1";

já tentei diretamente na pagina do jeito que você falou e nada.

já mudei para tudo quanto há jeito o codificador do meu editor e nada, que que será em???

Script para alterar codificação no linux

Como bônus, segue um script que faz a conversão entre arquivos. Salve em sua pasta home, como utf2iso.sh, de permissão de execução e depois é só chamar ele. Caso queira fazer a operação inversa (utf para iso), é só trocar a seguinte linha:

  1. iconv -f iso-8859-1 -t utf-8 $i > ../utf-8/$i;

Por

  1. iconv -f utf-8 -t iso-8859-1 $i > ../utf-8/$i;

O script na íntegra:

  1. #!/bin/bash
  2.  
  3. # 04/07/2007
  4. # por Marcelo Oliveira - <a href="http://www.iboletim.com.br<br />
  5. #" title="www.iboletim.com.br<br />
  6. #">www.iboletim.com.br<br />
  7. #</a> Licença de uso: GPL
  8.  
  9. # uso:
  10. # utf2iso.sh diretorio-a-ser-convertido
  11.  
  12. # fecha se nao for fornecido nenhum argumento
  13. if [ $# -eq 0 ]
  14. then
  15. echo "ERRO: especifique o nome da pasta com os arquivos a serem convertidos!"
  16. echo "Uso: ./utf2iso.sh diretorio-a-ser-convertido"
  17.  
  18. fi
  19.  
  20. # cria diretorio para armazenar arquivos convertidos
  21. cp -R $1 utf-8
  22.  
  23. # acessa diretorio com os arquivos a serem convertidos
  24. cd $1
  25.  
  26. # cria lista de todos os arquivos que serao convertidos (estou excluindo .gif e .jpg)
  27. lista=`find -type f | grep -v gif | grep -v jpg | grep -v swf | grep -v MID | grep -v pdf | grep -v mp3 | grep -v zip`
  28.  
  29. # executa conversao
  30. for i in $lista
  31. do
  32. echo "convertendo... $i"
  33. iconv -f iso-8859-1 -t utf-8 $i > ../utf-8/$i;
  34. #read; # para verificar as mensagens de erro
  35. done
  36.  
  37. if [ $? == 0 ]
  38. then
  39. echo -e "\nConversao terminada com sucesso!\n"
  40. fi

Abs

Coyote

*********
* Pier de Ipanema: http://www.pierdeipanema.com.br/
* Pier de Ipanema no Orkut: http://www.orkut.com.br/Main#Community.aspx?rl=cpp&cmm=2923344

FUNCIONA

Essa dica funciona que é uma maravilha!!!

Já tinha feito isso, tinha visto num foro, acho que o texto é exatamente esse que esta aqui, valeu pela iniciativa de ajudar.

NatanaelFreire.com

Olá Natan, Primeiro usuário

Olá Natan,

Primeiro usuário registrado no novo site ! :D
Essa dica foi publicada por mim na lista do CI e na Comunidade Drupal.

Obrigado pela participação.

Abs

Coyote

*********
* Pier de Ipanema: http://www.pierdeipanema.com.br/
* Pier de Ipanema no Orkut: http://www.orkut.com.br/Main#Community.aspx?rl=cpp&cmm=2923344