Caracteres acentuados e o UTF-8 (Html/Php)

Faça uma pergunta
Uma pergunta que aparece regularmente no fórum é Como fazer para que os acentos sejam exibidos corretamente em minhas páginas? Uma das soluções é usar o UTF-8


Como verificar os arquivos de codificação

Os arquivos (PHP e HTML) do seu site devem ser codificados em UTF-8 (de preferência, sem BOM). Para isso, você pode usar seu editor de texto favorito (ou o seu IDE).

Exemplo

Notepad++: vá em Formato > Codificar em UTF-8 (sem BOM);


Dreamweaver: vá em Alterar > Propriedades da página > -Título/Codificação;

Aptana: vá em Edit (Editar) > Set Encoding (Configuração de codificação);

Bloco de notas do Windows: vá em Arquivo > Salvar como... e selecione UTF-8 na lista de codificação;

PHPDesigner: vá em Arquivo > Codificação do arquivo e escolha UTF-8 na lista;

PHPEdit: na barra de tarefas, selecione UTF-8 sem a marca de ordem dos bytes na lista;

UltraEdit: vá em Arquivo > Conversões > ASCII para UTF-8.

Como definir a conexão com o BDD

Em PDO (PHP Data Objects), por exemplo, você pode especificar a codificação durante a conexão adicionando o charset (codificação de caracteres).

try{
  $bdd =new PDO('mysql:host=localhost; 
 dbname=mabdd; charset=utf8', 'user', 'password');
  $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
} catch(PDOException $e) {
    die('Erro: ' . $e->getMessage());
}


Em Mysqli vamos utilizar a instrução:
//Estilo orientado ao objeto
$link->set_charset("utf8")

//Estilo processual
mysqli_set_charset($link, "utf8")

$link representando a conexão.

Como declarar a codificação em sua página

Essa declaração é feita no cabeçalho das suas páginas. Em HTML, na marca HEAD você pode usar, por exemplo:

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

ou (em HTML5)
meta charset="UTF-8"

Em PHP você pode usar a instrução:
header( 'content-type: text/html; charset=utf-8' );

Como verificar se os seus BDD estão em UTF-8

De um modo geral, em um BDD MySQL (banco de dados) usamos a codificação utf8-general-ci ou utf8_unicode_ci.

Observação: se você já fez inserções no BDD, verifique se os caracteres acentuados aparecem corretamente em suas tabelas.

Utf8_encode/Utf8_decode

Não se esqueça de remover todas as instruções Utf8_encode / Utf8_decode que você pode ter colocado em seus scripts.

Saiba mais

Como se conectar a um banco de dados com DOP/mysqli
Como gerenciar os erros no PDO
PHP - Notice: Undefined index:

Foto: © Linux.
Jean-François Pillou

Nosso conteúdo é produzido em colaboração com especialistas em tecnologia da informação sob o comando de Jean-François Pillou, fundador do CCM.net e diretor digital do Grupo Figaro. CCM é um site sobre tecnologia líder em nível internacional e está disponível em 11 idiomas.

Mais informações sobre a equipe do CCM

Veja também