hinom 5 Denunciar post Postado Abril 16, 2009 Exemplo prático sobre como preparar o PHP, o HTML e o Banco de dados MySQL para um determinado conjunto de caracteres. O charset utilizado neste tutorial é o conjunto multibyte UTF-8. Para este exercício, utilizaremos o editor de textos, EditPad Lite (versão brasileira) Tela inicial do EditPad Lite http://forum.imasters.com.br/public/style_emoticons/default/seta.gif Clique em "Conversões" -> "Codificação do Texto" http://forum.imasters.com.br/public/style_emoticons/default/seta.gif Escolha "Unicode, UTF-8" http://forum.imasters.com.br/public/style_emoticons/default/seta.gif OK, agora, cole o seguinte código e salve como "index.html" http://forum.imasters.com.br/public/style_emoticons/default/seta.gif <html> <title>PHP, HTML, MySQL - Charset Encoding</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <head> </head> <body> <form action="char_test.php" method="POST"> <textarea name="text" cols="25" rows="10"> English Português 日本語 中文 عربي Ελληνικά עִברִי Čeština हिन्दी </textarea> <input type="submit"> </form> </body> </html> Abra uma nova aba no editor para criarmos um novo arquivo http://forum.imasters.com.br/public/style_emoticons/default/seta.gif Salve-o como "charset_test.php" http://forum.imasters.com.br/public/style_emoticons/default/seta.gif http://img214.imageshack.us/img214/3240/007n.png Cole o seguinte código: <?php $v = 'text'; $$v = false; if( isset( $_POST[$v] ) ) { $$v = $_POST[$v]; } if( $$v ) { $conn = mysql_connect( 'localhost', 'root', '' ); mysql_select_db( 'charset_test', $conn ); $sql = "INSERT INTO encoding ( `text` ) VALUES ( '" . $$v . "' );"; mysql_query( $sql, $conn ); mysql_close( ); } ?> [<a href="./">inserir</a>] [<a href="list.php">exibir</a>] Abra uma nova aba no editor para criarmos um novo arquivo http://forum.imasters.com.br/public/style_emoticons/default/seta.gif http://img214.imageshack.us/img214/1417/006.png Salve-o como "list.php" http://forum.imasters.com.br/public/style_emoticons/default/seta.gif http://img2.imageshack.us/img2/3249/013.png Cole o seguinte código: <html> <title>PHP, HTML, MySQL - Charset Encoding</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <head></head> <body> [<a href="./">inserir</a>] <hr> <?php $conn = mysql_connect( 'localhost', 'root', '' ); mysql_select_db( 'charset_test', $conn ); $sql = "SELECT `text` FROM encoding ORDER BY `text` ASC;"; $data = mysql_query( $sql, $conn ); while( $l = mysql_fetch_array( $data, MYSQL_ASSOC ) ) { echo PHP_EOL . '<hr>' . nl2br( $l['text'] ); } mysql_close( ); ?> </body> </html> Base de dados para testes para este exemplo, nome do banco: charset_test nome da tabela: encoding CHARSET: utf8 COLLATE: utf8_general_ci ( A sigla "ci" significa "Case Insensitive" ) CREATE DATABASE charset_test; USE charset_test; CREATE TABLE `encoding` ( `id` int(4) NOT NULL auto_increment, `text` varchar(100) NOT NULL default '', PRIMARY KEY (`id`), UNIQUE KEY `id` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; Acesse o local da página index.html ( exemplo: http://localhost/charset/ ) O conteúdo abaixo deverá aparecer na tela http://forum.imasters.com.br/public/style_emoticons/default/seta.gif http://img2.imageshack.us/img2/4862/011t.png [pressione o botão indicado pela seta vermelha] Após o envio, a seguinte tela será exibida: http://img214.imageshack.us/img214/6126/012k.png * Clique em [inserir] para incluir mais dados * Clique em [exibir] para listar os dados cadastrados Obs: A partir do PHP 5.3.0, utilize o cabeçalho header('Content-Type: text/html; charset=utf-8');em todas as páginas onde deseja que o conteúdo seja enviado como o respectivo encoding ao browser.Mesmo especificando a "Meta Tag HTML", o browser Firefox não reconhece, causando problemas na apresentação do conteúdo. Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Setembro 30, 2009 Simulação de erros comuns Simulação 1 1. Configure o editor de textos para encoding "UTF-8" 2. Crie um novo arquivo chamado "include.php", com formato UTF-8 e vazio. 3. Configure o editor de textos para encoding "iso-8859-1". 4. Crie um novo arquivo chamado "include-iso.php", com formato "iso-8859-1" contendo o seguinte script: <?phprequire('include.php');?><html><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><title>Page Title - Título da página</title><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head><body>OK á é í ú ó</body></html>Execute o arquivo "include-iso.php" e veja o resultado: UTF-8 + MySQL FULLTEXT http://forum.imasters.com.br/index.php?/topic/374346-utf-8-fulltext-problemao/ Problemas com codificação: acentos não interpretados http://www.rberaldo.com.br/blog/2009/11/06/problemas-com-codificacao-acentos-nao-interpretados/ Codificação de Caracteres (W3.org) http://www.w3.org/International/O-charset.pt-br.php Character Sets / Character Encoding Issues http://www.phpwact.org/php/i18n/charsets setagens em tempo de execução, sem necessidade de converter dados conforme o ambiente em que é executado http://forum.imasters.com.br/topic/467664-erro-acentuacao-php/page__view__findpost__p__1854202 Compartilhar este post Link para o post Compartilhar em outros sites
LuX_ 2 Denunciar post Postado Fevereiro 23, 2012 Mais uma sugestão, aceita pelo Hinom para usuários de Sistemas Operacionais Unix like: Caso esteja conectando-se ao MySQL via terminal (Com o famoso comando mysql -u nomedousario -p), tenha certeza que esta conexão também está com o character-set correto. Como assim? Acontece que muitas vezes (isso aconteceu comigo) a sua conexão do PHP com o MySQL pode estar perfeita, tudo com o mesmo encoding, character set e collation, tudo perfeito. Mas quando você confere pelo terminal vê os caracteres quebrados. Sim, dá a impressão de que o PHP e o MySQL estão errados e o terminal está certo, mas não necessariamente. Para fazer o teste, conecte-se ao MySQL pelo terminal com o seginte comando: mysql -u nomeusuario -p --default-character-set=charset Onde: nomeusuario é o seu nome de usuário e charset é o charset que você está querendo configurar o servidor. Vamos supor que seu usuário seja root você deixou PHP, HTML e MYSQL configurados para rodar em UTF-8. Sua conexão deve ficar algo assim: mysql -u root -p --default-character-set=utf8 Ou então para o famoso: ISO-8859-1 mysql -u root -p --default-character-set=latin1 Caso a sua conexão ocorra com o seu charset desejado e os dados ficaram estragados, então significa que ali eles foram inseridos por outro charset. Ahá! Pegamos o erro! Então se você alterar na unha (via update) os dados (Agora sua coenxão está no charset certo) vão ficar corretos no terminal. Se tudo ocorreu certo ao atualizar sua página PHP você notará que os caracteres também ficaram certos lá. Para definir o default-character-set no MYSQL para não precisar ficar forçando via terminal basta especificá-lo no seu arquivo de configuração do MySQL (my.cnf ou my.ini). [mysql] default-character-set=seucharset Compartilhar este post Link para o post Compartilhar em outros sites