Formação Oracle DBA Completa


Entenda as codificações iso-8859-1 e UTF-8 e outras

Entenda as codificações iso-8859-1 e UTF-8 e outras

31 de julho de 2018 1 Por Ramos de Souza Janones
Powered by Rock Convert

Entenda como funcionam as codificações iso-8859-1 e UTF-8 e outras, utilizando a linguagem de programação PHP e o banco de dados MySQL.

No momento que a página começa a renderizar, ela já assume uma codificação (ou tenta detectá-la acaso não seja declarada, geralmente usa o padrão do servidor).

Os problemas comuns da codificação

É muito comum quando estamos trabalhando com acentos nos depararmos com caracteres estranhos como por exemplo:

  • Algo semelhante a  (que representa o é) ou (que representa ã), isto ocorre porque o caractere é unicode, mas a página está em iso-8859-1 (ou outro compatível).
  • E o sinal  um exemplo de situação é quando você usa um acentos compatíveis com iso-8859-1 em uma página que esta tentando processar UTF-8 devido ao Content-Type: ...; charset=utf8.

Leia também: Release do livro: Desenvolvedor Kotlin Android – Bibliotecas para o dia a dia

Sobre o iso-8859-1

Eu recomendo usar iso-8859-1 se o seu site for “100% em Português” e você não necessite de “codificações extras” (como por exemplo emojis), no entanto mesmo sendo em Português você deve pensar em talvez migrar pro utf-8, um dos motivos é que em junho de 2004, o grupo de desenvolvimento da ISO/IEC responsável por sua manutenção declarou o fim do suporte a esta codificação, concentrando-se no UCS e no Unicode.

A seguir irei explicar como usar cada um deles, conforme os tópicos:

  • O que é necessário para usar UTF-8
  • O que é necessário para usar iso-8859-1/latin1/ansi

O que é necessário para usa UTF-8

  • PHP scripts (me refiro aos arquivos no servidor e não a resposta do mesmo) salvos em “utf-8 sem BOM”
  • MySQL (ou outro tipo de banco de dados) com charset=utf-8
  • Preferencialmente defina usando PHP header('Content-type: text/html; charset=UTF-8');

Nota: A vantagem do UTF-8 é que você pode utilizar vários “idiomas” na sua página com caracteres que não são suportados pelo “iso-8859-1”.

Fonte: https://pt.wikipedia.org/wiki/ISO_8859-1

VAI GOSTAR: Guia Jurídico Definitivo para Startups

VEJA TAMBÉM: Sucesso na Carreira com o LinkedIn

RECOMENDAMOS: Curso de Desenvolvimento de Games Completo

LEIA: Como Aprender Java e ir além do mercado de trabalho tradicional


Se decidir usar UTF-8 no seu site/projeto, recomendo seguir os seguintes passos:

Scripts PHP com UTF-8 sem “BOM”

Nota: leia sobre isto em https://en.wikipedia.org/wiki/UTF-8#Byte_order_mark (Inglês)

Você deve salvar todos scripts PHP (até os que você usará com includerequire, etc) em utf-8 sem “BOM”, você pode utilizar softwares como SublimeText ou notepad++ para converter os arquivos:

  • Usando notepad++:
  • utf8 sem bom notepad++
  • Usando Sublime Text:
  • utf8 sublime sublimetext
  • Usando Eclipse vá até Window > Preferences > General > Workspace > Text File Encoding:
  • netbeans

Nota: que arquivos com extensão .js ou .css que usam acentos no conteúdo também ser salvos com a mesma codificação que as páginas, da mesma maneira que foi usado para salvar os documentos descritos acima, eventualmente arquivos .svg podem ser embarcados então se eles tiverem qualquer acentuação ou caractere diferente também devem ser salvos com a mesma codificação da página

MySQL com UTF-8

Para criar uma tabela em UTFf-8 no MySQL você deve utilizar algo como:

CREATE TABLE minhatabela ( id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, titulo varchar(300) DEFAULT NULL ) ENGINE=InnoDB CHARACTER SET=uft8 COLLATER uft8_unicode_cli;

LEIA TAMBÉM:  10 novidades do PHP 7

Se as tabelas existem, então primeiro faça um BACKUP delas e depois, utilize um dos seguintes comandos (conforme a necessidade):

Converte banco de dados: ALTER DATABASE bancodedados CHARACTER SET utf8 COLLATE utf8_unicode_ci;

  • Converte uma tabela especifica: ALTER TABLE minhatabela CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Além de criar as tabelas em UTF-8 é necessário definir a conexão como UTF-8.

Com PDO é necessário usar exec:

$conn = new PDO('mysql:host=HOST;dbname=BANCO;charset=utf-8', 'USUARIO', 'SENHA');
$conn->exec('SET CHARACTER SET utf8');//Define o charset como UTF-8

 

Com o mysqli é necessário usar mysqli_set_charset:

$mysqli = new mysqli('HOST', 'usuario', 'senha', 'banco');

if ($mysqli->connect_error) {
    printf('Erro de conexão: %s', $mysqli->connect_errno);
    exit;
}

/*
 * compatibilidade para to 5.2.9 e 5.3.0.
 */
if (mysqli_connect_error()) {
    printf('Erro de conexão: %s', mysqli_connect_error());
    exit;
}

if (false === $mysqli->set_charset('utf8')) {
    printf('Error ao usar utf8: %s', $mysqli->error);
    exit;
}

 

Com mysqli procedural:

// codigo
<?php
$link = mysqli_connect('HOST', 'usuario', 'senha', 'banco');

if (mysqli_connect_error()) {
    printf('Erro de conexão: %s', mysqli_connect_error());
    exit;
}

if (!mysqli_set_charset($link, 'utf8')) {
    printf('Error ao usar utf8: %s', mysqli_error($link));
    exit;
}

 

Definindo o charset da página

Você pode usar a tag  para definir o charset, mas o recomendável é você fazer isto na resposta da requisição (resposta do servidor), definindo os “headers” (isto não quer dizer que você não deva utilizar <meta>).

Curso de PHP ERP com NFe.

Para isto, no PHP use a função header:

O motivo para se utilizar na resposta do servidor também é por causa do tempo de renderização da página quanto a resposta do servidor e páginas AJAX precisam também do charset definido por header();.

Nota: header(); sempre deve ir no topo do script antes de qualquer echoprint, ou outro tipo de exibição de conteúdo.

Em arquivos que a resposta deve ser HTML:

Powered by Rock Convert
<?php
header('Content-Type: text/html; charset=UTF-8');

echo 'Conteudo';

 


O que é necessário para usar iso-8859-1/latin1/ansi

Para se usar iso-8859-1, você deve utilizar:

  • PHP scripts salvos em “iso-8859-1” (ou windows-1252 e ansi)
  • MySQL (ou outro tipo de banco de dados) com charset=iso-8859-1
  • Preferencialmente defina usando PHP header('Content-type: text/html; charset=iso-8859-1');

Primeiro deve salvar “todos scripts .php” como iso-8859-1 (ou ANSI) e documentos .html (se houver):

  • Para salvar usando notepad++:salvando documento em ANSI com notepad++
  • Para salvar usando SublimeText:salvando documento em iso-8859-1 ou windows 1252

MySQL com Latin1

Quase todos servidores mysql vem configurado para usar por padrão o charset latin1, no entanto isto pode ser modificado no my.ini, então os passos a seguir sobre mysql são opcionais, pois dependerão do seu my.ini estar usando algo diferente do latin1 nas seguintes linhas:

[client]
default-character-set=<charset padrão para o cliente>

[mysql]
default-character-set=<charset padrão para o cliente>

 

LEIA TAMBÉM:  Tecnologias que andam bombando no GitHub ultimamente

Então vai precisa definir latin1, com PDO é necessário usar exec:

//codigo
$conn = new PDO('mysql:host=HOST;dbname=BANCO;charset=utf-8', 'USUARIO', 'SENHA');
$conn->exec('SET CHARACTER SET latin1');//Define o charset como UTF-8

E com o mysqli é necessário usar mysqli_set_charset: $mysqli = new mysqli('HOST', 'usuario', 'senha', 'banco'); if ($mysqli->connect_error) { printf('Erro de conexão: %s', $mysqli->connect_errno); exit; } /* * compatibilidade para to 5.2.9 e 5.3.0. */ if (mysqli_connect_error()) { printf('Erro de conexão: %s', mysqli_connect_error()); exit; } if (false === $mysqli->set_charset('latin1')) { printf('Error ao usar latin1: %s', $mysqli->error); exit; } Com mysqli procedural:
<?php
$link = mysqli_connect('HOST', 'usuario', 'senha', 'banco');

if (mysqli_connect_error()) {
    printf('Erro de conexão: %s', mysqli_connect_error());
    exit;
}

if (!mysqli_set_charset($link, 'latin1')) {
    printf('Error ao usar latin1: %s', mysqli_error($link));
    exit;
}

 

Definindo o charset da página

Basta adcionar para ; charset=iso=8859-1 após o tipo, por exemplo text/html ou application/xml ou text/plain:


<?php
header('Content-Type: text/html; charset=iso-8859-1');

echo 'Conteudo';

 

Outros tutoriais e dicas sobre PHP:

Banco de dados

Artigos e dicas sobre banco de dados que você vai gostar:

MongoDB

– Principais diferenças entre MongoDB e MySQL ou outro RDBMS

– Southbank Software apresenta dbKoda: uma ferramenta de desenvolvimento Open Source para MongoDB

MySQL e Instruções SQL em geral

– SQL e Regex – Entenda quando e como usar em instruções SQL

– MySQL – Manter o formato Date e DateTime em formato dd/mm/Year e dd/mm/Year:HH:mm:ss

– SQL – O que são VIEWS SQL, vantagens e desvantagens

– Instrução Insert MySQL e JSON com todos os bancos brasileiros

– PHP e MySQL – Entendendo as codificações iso-8859-1 e UTF-8 e outras

– Como redefinir a senha de root do MySQL ou do MariaDB

– Para que serve uma MySQL Transaction?

– Banco de Dados – Índices desnecessários no banco são um problema?

– Entenda a diferença entre LIKE, IN e BETWEEN no MySQL

– LinkedIn desenvolve a ferramenta MySQL Query Analyzer

– Como otimizar consultas MySQL

– Quando é interessante desnormalizar o banco de dados?

– Entenda Views em SQL, vantagens e desvantagens

– O que é normalização de banco de dados

– Por que não devemos usar funções do tipo mysql_*

SQL – Entenda as diferenças entre aspas simples e duplas

– SQL – Not IN ou Not EXISTS quando usar?

– SQL – Entendendo JOINS

– PHP Do Zero Ao Profissional – Análise do Curso

Subscribe to our mailing list

* indicates required


Além de PHP e MySQL, deseja receber outro tema?

LEIA TAMBÉM:  Crie Repositórios Privados para seus Códigos e Projetos de forma gratuita

Email Format


Powered by Rock Convert
Siga os bons!

Ramos de Souza Janones

Janones, é um empreendedor brasileiro apaixonado por empreendedorismo e tecnologia. Ao longo dos anos trabalhando com o desenvolvimento de softwares desktop desde a linguagem Clipper, passando pelo Delphi e atualmente com Java.

Optou pela formação de Publicidade e Marketing por sua segunda empresa de tecnologia ter participado do "boom" da internet nos anos 90 e na procura de melhorar seus conhecimentos em negócios.

Em razão da principal formação e profundos conhecimentos em programação e banco de dados, é capaz de realizar o desenvolvimento de aplicativos web, desktop e mobile com maior criatividade e inovação que profissionais de desenvolvimento com uma formação única e mais especifica, dedicada somente ao desenvolvimento de softwares.

Com toda sua experiência com empresas de software, sua formação e paixão por negócios escreveu o livro "Marketing para Empresas e Profissionais de Software", publicado pela editora carioca Ciência Moderna em 2012. Além de outros livros sobre programação.

Últimos posts por Ramos de Souza Janones (exibir todos)

Sumário
PHP e MySQL - Entendendo as codificações iso-8859-1 e UTF-8 e outras
Nome do artigo
PHP e MySQL - Entendendo as codificações iso-8859-1 e UTF-8 e outras
Descrição
Entendenda como funcionam as codificações iso-8859-1 e UTF-8 e outras, utilizando a linguagem de programação PHP e o banco de dados MySQL.
Autor
Nome
Ramos da Informática
Logo

Frontend Do Zero Ao Profissional