+4

Lidando com UTF-8 com o PHP e MySQL

criado por Rafael Almeida em 30/11/2008 11:03am
Crie uma tabela com o conjunto de caracteres UTF-8, como no exemplo abaixo.

CREATE TABLE document (
    id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    unicodeText VARCHAR(45) NOT NULL
) CHARACTER SET utf8 COLLATE utf8_general_ci;

Se você preferir, crie antes um banco de dados em UTF-8, exemplo:

CREATE DATABASE `banco` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Para fazer operações em seu banco de dados, será necessário que crie um arquivo que o início dele seja semelhante a este:

<?php
# Informa qual o conjunto de caracteres será usado.
header('Content-Type: text/html; charset=utf-8');

# Conecta ao banco de dados
$conexao = mysql_connect('localhost','usuario','senha');
$banco = mysql_select_db('banco');

# Aqui está o segredo
mysql_query("SET NAMES 'utf8'");
mysql_query('SET character_set_connection=utf8');
mysql_query('SET character_set_client=utf8');
mysql_query('SET character_set_results=utf8');
?>

Lembre-se de incluir a seguinte meta entre a tag &lt;head> e &lt;/head>:

<meta http-equiv="content-type" content="text/html;charset=utf-8" />

Exemplo:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Título da página</title>
        <meta http-equiv="content-type" content="text/html;charset=utf-8" />
    </head>

    <body>
        <p>Conteúdo da página</p>
    </body>
</html>

Comentários:

Mostrando 1 - 10 de 18 comentários
Tive esse problema desde a semana passada, consegui resolver criando um arquivo com o nome de paginacao.cgi contendo o seguinte, e os acentos funcionaram.
#!/bin/sh
Content-type: text/html
Language: pt-br
Charset: UTF-8-pt-br
17/04/2017 1:07am (~7 anos atrás)

Ivan disse:
Demais!! 100% funcional!
26/10/2016 8:40pm (~7 anos atrás)

Fabricio disse:
Obrigado!

Ajudou mto aqui!
22/07/2015 8:21am (~8 anos atrás)

Muito boa a sacada Rafael, vc está de parabéns!
Realmente o assunto codificação é simples, mas a gente só vai estudar e aprender, depois que os erros "aparecem".

Grande abraço!
27/08/2013 7:24am (~10 anos atrás)

junior garcia disse:
Parabéns e muito obrigado Rafael!
Vi várias dicas sobre esse assunto, mas nada dava certo.
Sucesso e Deus abençoe!!
Abraços!
23/02/2012 3:09pm (~12 anos atrás)

Rafael, td blz?
É o seguinte:
Tenho meu BD todo em utf8_unicode_ci. Na exibição de dados ele exibe bem, td certo mas, qndo eu cadastro alguma coisa, os carcteres depois dos acentos somem, ex: Música - fica assim: M, saúde - fica: sa.

O que será?
02/11/2009 5:07pm (~14 anos atrás)

Rafael Almeida,
Parabéns pelo artigo, tenho tido problema com isso a algum tempo e nunca achei algo que funcionasse, ou não entendia o que lia, mas esse seu artigo me ajudou muito.
Obrigado.
16/07/2009 3:10pm (~14 anos atrás)

Valeu queridão pelo post, MAS.. em vez disso, configura no conf do mysql que é mais fácil né ;)

[]s brother.. bom post!
07/05/2009 5:33pm (~15 anos atrás)

João K. disse:
Se o seu banco de dados mysql por alguma razão dos infernos (ou está num servidor shared) e não consegue inserir dados em UTF-8 talvez seja útil essas linhas após vc fazer a conexão.

$conx = mysql_connect(xxxxxxx);
// dica para shared hosting
mysql_query("SET CHARACTER SET utf8");
//mysql_query("SET NAMES utf8");
//mysql_query("SET NAMES 'utf8' COLLATE 'utf8_general_ci'"); // medida extrema, opcional



02/05/2009 11:16pm (~15 anos atrás)

Seria interessante publicar um artigo nesta mesma linha que falasse de como trabalhar com migracao de bancos de dados mysql com versoes diferentes.
02/05/2009 6:39am (~15 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)