Banco de dúvidas

Caracteres estranhos no meu site

Se seu site está apresentando caracteres estranhos onde deveriam aparecer letras com acentuação, isso indica que a código fonte HTML está com uma codificação diferente da especificada pelo cabeçalho.

Por exemplo, se você vir algo semelhante a

Acentua��o

isso indica que a página ou script foi gravado com codificação "ISO-8859-1" (ou "Latin1", "Windows-1252", "CP-1252", ou "ANSI") e seu cabeçalho especifica codificação "UTF-8".

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

Se, contudo, os caracteres forem algo do tipo

Acentuação

a página ou script foi gravado com codificação "UTF-8", mas o cabeçalho está especificando codificação "ISO-8859-1".

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

É possível também que a codificação do seu banco de dados esteja diferente da do seu site. Vamos ver como lidar com isso a seguir.

Importante: lembre-se de fazer backup antes de alterar seus arquivos ou bancos de dados!

Como corrigir

Você pode:

  1. Alterar o cabeçalho HTML META que especifica a codificação para refletir o formato do arquivo (UTF-8 ou ISO-8859-1), ou
  2. Alterar a codificação do arquivo HTML ou PHP (ou outro).

A segunda opção pode ser feita de várias maneiras:

No PHP

A codificação padrão do PHP passou de ISO-8859-1 para UTF-8 a partir da versao 5.4. Então se você costumava usar o PHP 5.3 ou anterior e mudou para uma versão mais nova, os caracteres acentuados podem ficar estranhos. Nesse caso, é só mudar a codificação do PHP de volta para ISO-8859-1.

Siga para o painel de controle e, na função "Seleciona versão do PHP", altere a opção "default_charset", assim:

Uma alternativa é alterar seu arquivo php.ini e incluir o seguinte:

default_charset=ISO-8859-1

Se você NÃO tem acesso ao arquivo php.ini, tente alterar (ou criar) o arquivo .htaccess da pasta raiz do seu site PHP e inclua o seguinte:

php_value default_charset ISO-8859-1

Se nada disso funcionar, por favor entre em contato conosco para auxiliá-lo.

Pelo terminal do Linux

Você pode alterar os arquivos diretamente pela linha de comando do Linux acessando pelo SSH.

Primeiro use o comando "file" para saber a codificação atual de um arquivo texto:

$ file meuscript.php
meuscript.php: UTF-8 Unicode text

Para convertê-lo para outra codificação, use o comando "iconv":

iconv -f codificação_de_origem -t codificação_de_destino arquivo -o arquivo.novo

Por exemplo:

iconv -f utf-8 -t iso_8859-1 meuscript.php -o meuscript.php

Ou seja, ele vai converter da codificação UTF-8 para ISO-8859-1 e gravar no arquivo de mesmo nome (use -o para indicar qual o nome do arquivo a ser salvo).

Isso vai funcionar para um arquivo apenas. Se quiser converter todos os arquivos PHP de uma pasta e subpastas, use o seguinte comando:

find . -name \*.php -exec iconv -f utf-8 -t iso_8859-1 {} -o {} \;

Certifique-se de fazer um backup antes!

Pelo Notepad do Windows

Você pode mudar a codificação de um arquivo texto pelo Notepad do Windows. É uma forma simples e só dá para trocar de ANSI (ISO-8859-1) para UTF-8 e vice-versa. Também terá que fazer o procedimento para cada arquivo que deseja alterar.

Passo 1: abra o Notepad. No canto inferior direito vai estar indicada a codificação atual do arquivo.

Passo 2: siga para o menu "Arquivo", opção "Salvar Como...".

Passo 3: escolha a codificação na qual deseja salvar o arquivo. Clique em "Salvar".

No MySQL

Digamos que seu site está todo com codificação UTF-8, mas seu banco de dados está codificado como ISO-8859-1 (ou Latin1). Ao exibir os dados, se não fizer uma conversão antes, os caracteres especiais ou acentuados ficarão incorretos.

Você pode fazer essa conversão pelo phpMyAdmin facilmente. Se não tiver acesso ao phpMyAdmin ou preferir fazer "na mão", será necessário converter tabela por tabela.

Passo 1: para ver a codificação de uma tabela, use o comando:

show create table nome_da_tabela;

Vai aparecer algo assim:

CREATE TABLE `Usuarios` (
  `Usuario` varchar(30) NOT NULL DEFAULT '',
  `Senha` varchar(100) NOT NULL DEFAULT '',
  PRIMARY KEY (`Usuario`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Na última linha informa o conjunto de caracteres padrão da tabela.

Passo 2: realize a seguinte consulta (troque "Usuarios" pelo nome da sua tabela):

alter table `Usuarios` convert to character set utf8;

Faça isso para todas as tabelas do banco de dados. Não esqueça de tirar um backup antes!

Passo 3: ao final, para trocar o character set do banco de dados, use o comando:

alter database `nome_do_banco` character set utf8 collate utf8_general_ci;
Este artigo foi útil para você?