<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Alessandro Santos &#187; ISO-8859-1</title>
	<atom:link href="http://alessandrosantos.com.br/tag/iso-8859-1/feed/" rel="self" type="application/rss+xml" />
	<link>http://alessandrosantos.com.br</link>
	<description></description>
	<lastBuildDate>Wed, 07 Jul 2010 16:44:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>PHP, MySQL e UTF-8 (o guia)</title>
		<link>http://alessandrosantos.com.br/2009/08/18/php-mysql-e-utf-8-o-guia/</link>
		<comments>http://alessandrosantos.com.br/2009/08/18/php-mysql-e-utf-8-o-guia/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 12:12:08 +0000</pubDate>
		<dc:creator>Alessandro Santos</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Byte Order Marker]]></category>
		<category><![CDATA[Charset]]></category>
		<category><![CDATA[Content-Type]]></category>
		<category><![CDATA[Guia]]></category>
		<category><![CDATA[ISO-8859-1]]></category>
		<category><![CDATA[Unicode]]></category>
		<category><![CDATA[UTF-8]]></category>

		<guid isPermaLink="false">http://alessandrosantos.com.br/?p=214</guid>
		<description><![CDATA[Trabalhar com UTF-8 no PHP pode dar algumas dores de cabeça pra quem é novo, e até mesmo para alguns mais velhinhos&#8230; O PHP trabalha por padrão com ISO-8859-1, que são os caracteres latinos que estamos acostumados. Entretanto, o UTF-8 tem uma abrangência maior de caracteres e o ideal seria que nos acostumássemos a usar [...]]]></description>
			<content:encoded><![CDATA[<p>Trabalhar com UTF-8 no PHP pode dar algumas dores de cabeça pra quem é novo, e até mesmo para alguns mais velhinhos&#8230; O PHP trabalha por padrão com ISO-8859-1, que são os caracteres latinos que estamos acostumados. Entretanto, o UTF-8 tem uma abrangência maior de caracteres e o ideal seria que nos acostumássemos a usar este charset nas páginas.<br />
Este pequeno tutorial tem como objetivo deixar bem claro quais os passos a se tomar para construir uma aplicação totalmente baseada no charset UTF-8, desde as páginas HTML, passando pelo PHP e por fim no MySQL.<br />
Antes de tudo, aconselho que aprenda a <a href="http://alessandrosantos.com.br/?p=54">criar os seus arquivos utilizando o UTF-8 sem BOM</a>, que evitará dores de cabeça futuras quando estiver trabalhando com cookies, sessões e headers.<br />
O segundo passo é definir, no PHP que o charset dos arquivos que serão gerados terão a codificação UTF-8, com o seguinte código:<br />
<code>&lt;?php<br />
ini_set('default_charset','UTF-8');<br />
?&gt;</code><br />
Só setar o charset no PHP não adianta muito, pois alguns navegadores usam a codificação padrão da região do usuário, a não ser que o seguinte código esteja entre as tags <kbd>&lt;head&gt;</kbd> e <kbd>&lt;/head&gt;</kbd>:<br />
<code>&lt;meta http-equiv="Content-type" content="text/html; charset=UTF-8" /&gt;</code><br />
Com isso, você já pode trabalhar tranquilamente com UTF-8 e PHP sem ter problemas com os caracteres.<br />
Alguns cuidados são necessários quando for trabalhar com o MySQL, entretanto. Vou ensinar como se faz pelo <a href="http://www.phpmyadmin.net/home_page/index.php">PHPMyAdmin</a>, que acredito que todos que começaram a trabalhar com MySQL estão acostumados.<br />
Em primeiro lugar, ao criar o seu banco de dados, já crie usando o collation <kbd>utf8_general_ci</kbd>. Se o banco de dados já tiver um collation definido, não é necessário definir o collation das tabelas, pois elas herdarão o do banco. Mas mesmo assim é bom especificar o charset e collation de cada tabela. Como? Assim:<br />
<code>CREATE TABLE Clientes (<br />
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,<br />
  nome VARCHAR(60) NOT NULL,<br />
  PRIMARY KEY(id)<br />
)<br />
TYPE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;</code><br />
Ok. Nossa tabela está trabalhando com UTF-8 agora. Podemos começar a programar e relaxar porque nossos problemas com charset estão resolvidos, certo?<br />
A resposta é não.<br />
Se você continuar a programar com o sistema assim, os dados do banco serão inseridos e consultados de maneira correta, mas você vai perceber problemas quando tentar fazer buscas com palavras acentuadas insensível a maiúsculas, por exemplo: <kbd>Água</kbd>, <kbd>água</kbd> e <kbd>agua</kbd> serão palavras totalmente diferentes, sem contar que a ordenação de resultados com palavras que começam com letras acentuadas sairá bem bagunçada, coma letra <kbd>Ó</kbd> vindo antes de <kbd>B</kbd>, por exemplo.<br />
Esse é o problema que eu tive e que demorei eras pra descobrir. O banco estava OK, o PHP também, o mesmo com as páginas HTML&#8230; e quando eu inseria algum dado pelo PHPMyAdmin, este era inserido corretamente, o que significava que o problema não era no banco e sim na aplicação.<br />
Depois de meses <small>na verdade foram apenas algumas horas</small> de pesquisa, desconfiei que havia algo na conexão com o MySQL que estava dando esse problema. Fui fuçar no <a href="http://br.php.net">Manual do PHP</a> e encontrei a seguinte solução:<br />
<code>&lt;?php<br />
ini_set('default_charset','UTF-8'); // Para o charset das páginas e<br />
mysql_set_charset('utf8'); // para a conexão com o MySQL<br />
?&gt;</code><br />
Com isso todos os meus problemas foram resolvidos. <small>Na verdade não, pois tive que alterar todos os campos acentuados da tabela&#8230;</small><br />
Dá para usar a função <kbd>mysql_client_encoding</kbd> para identificar o charset da conexão com o MySQL, mas não acho necessário pra quem quer trabalhar diretamente com UTF-8 e não com vários charsets.<br />
Acho que por enquanto é só. Até o próximo semestre! <small>Brincadeira&#8230;</small></p>
]]></content:encoded>
			<wfw:commentRss>http://alessandrosantos.com.br/2009/08/18/php-mysql-e-utf-8-o-guia/feed/</wfw:commentRss>
		<slash:comments>48</slash:comments>
		</item>
		<item>
		<title>Problemas com a codificação UTF-8 em PHP</title>
		<link>http://alessandrosantos.com.br/2008/10/28/problemas-com-a-codificacao-utf-8-em-php/</link>
		<comments>http://alessandrosantos.com.br/2008/10/28/problemas-com-a-codificacao-utf-8-em-php/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 13:30:51 +0000</pubDate>
		<dc:creator>Alessandro Santos</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Byte Order Marker]]></category>
		<category><![CDATA[Charset]]></category>
		<category><![CDATA[Content-Type]]></category>
		<category><![CDATA[ISO-8859-1]]></category>
		<category><![CDATA[Unicode]]></category>
		<category><![CDATA[UTF-8]]></category>

		<guid isPermaLink="false">http://alessandrosantos.com.br/?p=54</guid>
		<description><![CDATA[Quando comecei a programar em PHP, não sabia muita coisa sobre codificações de caracteres e tudo mais. Aliás, não sei muita coisa até agora. Como todo bom usuário de Windows, tinha tudo pronto ali na minha frente e tudo rodava direitinho, até enviar os arquivos para um servidor Linux&#8230; O grande problema começou quando comecei [...]]]></description>
			<content:encoded><![CDATA[<p>Quando comecei a programar em <acronym title="PHP Hypertext Preprocessor"><a href="http://php.net">PHP</a></acronym>, não sabia muita coisa sobre codificações de caracteres e tudo mais. Aliás, não sei muita coisa até agora. Como todo bom usuário de Windows, tinha tudo pronto ali na minha frente e tudo rodava direitinho, até enviar os arquivos para um servidor Linux&#8230;</p>
<p>O grande problema começou quando comecei a usar por padrão a codificação <a href="http://unicode.org/">Unicode</a>, e a trabalhar direto com UTF-8. Logo na na primeira vez que chamei <kbd><a href="http://br.php.net/session_start">session_start()</a></kbd>, apareceu a seguinte mensagem de erro:</p>
<blockquote><p>Warning: session_start() [function.session-start]: Cannot send session cookie &#8211; headers already sent by (output started at /var/www/teste.php:1) in /var/www/teste.php on line 2</p></blockquote>
<p>O curioso de tudo é que o <kbd>session_start()</kbd> só retorna erro se alguma coisa tiver sido enviada para o cliente <em>antes</em> de chamar essa função, mas vamos dar uma olhada no código:<br />
<code>&lt;?php<br />
session_start();<br />
?&gt;</code><br />
Observe bem, não existe <strong>nada antes do código</strong>. Mas será que não mesmo? Sabemos que o PHP trabalha nativamente com a codificação ISO-8859-1 e que até o momento não tem um suporte muito bom para Unicode (UTF-8). Então através do <a href="http://quanta.kdewebdev.org/">Quanta</a>, vamos &#8220;emular&#8221; o arquivo como se ele estivesse sendo visto pelo PHP, transformando a codificação dos caracteres para ISO-8859-1 através do comando <kbd>Tools - Encoding - Western European</kbd>:<br />
<code>ï»¿&lt;?php<br />
session_start();<br />
?&gt;</code><br />
Bingo! Já descobrimos o que está sendo enviado para o navegador. Aqueles caracteres estranhos <kbd>ï»¿</kbd> são os responsáveis pelo problema. Mas&#8230; o que são eles?</p>
<p>Através de <a href="http://www.google.com.br/search?hl=pt-BR&amp;q=PHP+strange+characters&amp;btnG=Pesquisar&amp;meta=">algumas pesquisas no Google</a>, descobri que esses caracteres são uma espécie de assinatura do Unicode, chamada <acronym title="Byte Order Mark">BOM</acronym>, que é onde quero chegar e a solução de todos os nossos problemas envolvendo UTF-8 e PHP.</p>
<p>De acordo com <a href="http://unicode.org/faq/utf_bom.html#BOM">esta página</a>, a BOM consiste numa sequencia de caracteres no <em>início</em> dos dados recebidos pelo navegador/agente, a qual define a ordem dos bytes e a forma de codificação. <small>(minha tradução mal-feita).</small></p>
<p>Segundo a mesma página, não é necessário utilizar a BOM quando se estiver codificando em UTF-8, afinal ele é mais indicado para UTF-16 e UTF-32. O UTF-8 <strong>pode ou não</strong> usar BOM. No nosso caso, para resolver esse problema com o PHP, devemos programar em arquivos <strong>UTF-8 sem BOM</strong>. Como fazer isso?</p>
<p>Bom, o Quanta, pelo que eu sei, já faz esse tipo de conversão automaticamente. Desde que migrei para o Ubuntu, só tenho utilizado ele e não tenho tido problemas com codificação de caracteres. Se você utiliza o Windows, recomendo um ótimo editor que eu utilizava quando desenvolvia no Windows: o <a href="http://notepad-plus.sourceforge.net/br/site.htm">Notepad++</a>. Existem outros, é claro, e cada desenvolvedor escolhe o que é melhor para si. Não tenho certeza, mas parece que o Dreamweaver tem a opção de salvar sem BOM, mas quero me ater a indicar software livre por aqui.</p>
<p>Para finalizar, quero indicar uma leitura interessante sobre codificação UTF-8, que encontrei quando procurava a solução desse problema. Um artigo que se chama <a href="http://local.joelonsoftware.com/mediawiki/index.php/O_M%C3%ADnimo_Absoluto_Que_Todo_Desenvolvedor_de_Software_Absolutamente%2C_Positivamente_Precisa_Saber_Sobre_Unicode_e_Conjuntos_de_Caracteres_(Sem_Desculpas!)">O Mínimo Absoluto Que Todo Desenvolvedor de Software Absolutamente, Positivamente Precisa Saber Sobre Unicode e Conjuntos de Caracteres (Sem Desculpas!)</a>. Boa leitura!</p>
]]></content:encoded>
			<wfw:commentRss>http://alessandrosantos.com.br/2008/10/28/problemas-com-a-codificacao-utf-8-em-php/feed/</wfw:commentRss>
		<slash:comments>37</slash:comments>
		</item>
	</channel>
</rss>

