Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
PHP/MySQL codificação de caracteres – Acentuação.
Esses dias fiquei apanhando para acertar a codificação dos caracteres no sistema, depois de muita pesquisa na net, o pessoal sempre falando a mesma coisa, não encontrei a solução, então depois de horas tentando consegui resolver o problema. Não vou entrar em detalhes então vamos à receita do bolo:
1º Colocar o cabeçalho no código php:
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
2º A conexão que o php faz com o banco também deve conter o cabeçalho:
header("Content-Type: text/html; charset=ISO-8859-1",true);
Isso pode ser inserido no arquivo que faz a conexão com o banco ou dentro do documento php.
Até ai nenhuma novidade.
3º Verificar em qual codificação o MySQL esta trabalhando:
mysql> status;
--------------
mysql Ver 14.12 Distrib 5.0.84, for pc-linux-gnu (i686) using readline 6.0
Connection id: 28
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: /usr/bin/less
Using outfile: ''
Using delimiter: ;
Server version: 5.0.84-log Gentoo Linux mysql-5.0.84-r1
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8
Db characterset: utf8
Client characterset: latin1
Conn. characterset: latin1
UNIX socket: /var/run/mysqld/mysqld.sock
Uptime: 46 min 41 sec
Threads: 2 Questions: 897 Slow queries: 0 Opens: 86 Flush tables: 1 Open tables: 45 Queries per second avg: 0.320
Como você pode notar
Server characterset: utf8 <= Servidor esta com utf8
Db characterset: utf8 <= O banco que esta sendo usado no momento esta com utf8
Client characterset: latin1 <= Aqui é o pulo do gato o Cliente tem que ser o mesmo que o apache esta enviando, se estiver setado utf8 vai dar problema.
Conn. characterset: latin1 <= E a conexão também.
Mas como alterar isso ???
4º Alterando as configs do /etc/mysql/my.cnf – “Estou supondo que você esteja usando Linux, algumas distros de Linux podem mudar o diretório do arquivo de configuração, se você esta usando windows ou outro sistema operacional verifique onde fica o arquivo.”
[mysql]
character-sets-dir=/usr/share/mysql/charsets
#default-character-set=utf8 <=comentar as linhas com utf8 e inserir as linhas com latin1
default-character-set=latin1
[mysqladmin]
character-sets-dir=/usr/share/mysql/charsets
#default-character-set=utf8
default-character-set=latin1
[mysqlcheck]
character-sets-dir=/usr/share/mysql/charsets
#default-character-set=utf8
default-character-set=latin1
[mysqldump]
character-sets-dir=/usr/share/mysql/charsets
#default-character-set=utf8
default-character-set=latin1
[mysqlimport]
character-sets-dir=/usr/share/mysql/charsets
#default-character-set=utf8
default-character-set=latin1
[mysqlshow]
character-sets-dir=/usr/share/mysql/charsets
#default-character-set=utf8
default-character-set=latin1
5º Alterar as configs do /etc/php/apache2-php5/php.ini - “Estou supondo que você esteja usando Linux, algumas distros de Linux podem mudar o diretório do arquivo de configuração, se você esta usando windows ou outro sistema operacional verifique onde fica o arquivo.”
; As of 4.0b4, PHP always outputs a character encoding by default in
; the Content-type: header. To disable sending of the charset, simply
; set it to be empty.
;
; PHP's built-in default is text/html
;default_mimetype = "text/html" <= comentar essa e descomentar a de baixo
default_charset = "iso-8859-1"
mais abaixo
; MySQL extensions default connection charset settings
mysql.connect_charset = latin1 <= descomentar essa
mysqli.connect_charset = latin1 <= e essa linha para setar o PHP para trabalhar com latin1
;pdo_mysql.connect_charset = utf8
6º Agora tudo ok e funcionando perfeitamente :D
Até a próxima.
Carregando comentários...