rMonte

O mundo e a tecnologia pela perspectiva de Raphael Monte

22

Acentuação no PHP e MYSQL com UTF-8

Olá,

Acentuação ao gravar em banco de dados com linguagem php é um problema que todos programadores já passaram um dia, como eu passei a algum tempo e tive que quebrar a cabeça para resolver. É muito chato quando se desenvolve uma aplicação que ao tentar gravar informações no banco de dados que contenham caracteres não usuais como a Ç chegam no banco como Ã§, isso é extremamente  irritante. Chega de sofrimento, vamos então aos passos da solução.

MYSQL

O banco de dados deve ser criado com COLLATE utf8_general_ci, que define o banco como sendo utf-8.

CREATE DATABASE `database` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

Se já tiver um banco, faça a alteração com o comando a seguir.

ALTER DATABASE `bancodedados` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

 

PHP

No seu script PHP de conexão com o banco de dados, você deve mudar o charset para UTF-8 e após a conexão mysql é preciso executar os comandos mysql para setar o charset.

header('Content-Type: text/html; charset=utf-8');
mysql_connect($servidor,$usuario,$senha);
mysql_select_db($database);
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');

HTML

Nas páginas onde serão exibidas as informações inclua a meta tag abaixo para definir a página como UTF-8.

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

 

Espero que essa informação os ajudem, comentem se conseguiram.

 

CharsetMysqlPHP

Raphael Monte • 12 de março de 2011


Previous Post

Next Post

Comments

  1. DiogoLessa 8 de setembro de 2011 - 14:50 Reply

    Olá, muito bom seu tópico!

    Baseado nele que estou sentindo algumas dificuldades (charset=utf-8);
    Tô usando o Dreamweaver para criar uma página de blog em PHP, e no navegador estão aparecendo muitos erros como este:
    a quinta, � hora de resolver a parte pr�tica. Ap�s arrancar uma vit�ria heroica no gin�sio Ilhas Malvinas
    Criei um banco de dados MySql e o armazenamento deles é perfeito, mas quando vou exibir no navegador… aparece estes problemas com a acentuação!

    Testei as informações passadas nesse blog e não deram certas… agradeço qualquer ajuda!

    Um abraço!

    • raphael 8 de setembro de 2011 - 19:12 Reply

      Diogo, provavelmente os arquivos que você criou no Dreamweaver não foram salvos no formato UTF-8.
      Voce pode converter todos os arquivos do seu projeto simplesmente abrindo os mesmos no bloco de notas do windows e clicando na opção ” arquivo” e em “salvar como” na parte inferior da tela a seguir tem o campo “codificação”, basta você selecionar a opção UTF-8. No Dreamweaver deve haver esta opção para configuração, mas como nao uso o Dreamweaver, nao sei dizer como fazer isso, mas nada que o Google não saiba. Faça o teste e me diga se conseguiu.

  2. Diogo Lessa 8 de setembro de 2011 - 20:35 Reply

    Rafael

    utilizei o bloco de notas… salvei os arquivos em UTF-8… só que o erro persiste meu caro…

    inclusive e o banco mysql também está collation utf8_general_ci…

    andei pesquisando no google e não encontrei soluções para o meu problema…

    mas continuo na luta!

    Agradeço de novo!

    Diogo Lessa

  3. Daniel 21 de novembro de 2012 - 15:49 Reply

    Valeu a dica! Funcionou blzinha, este problema é realmente chato… Abraço.

  4. Ricardo Bellanda 6 de setembro de 2013 - 19:27 Reply

    Amigo, muito obrigado, ajudou muito.
    Realmente esse problema é extremamente chato!
    Se não fosse a torre de babel teríamos um padrão único. rsssss

  5. Sergio Moreira 23 de novembro de 2013 - 4:48 Reply

    Valewwwww…

    Sou iniciante e estava perdidoooo rsrs

    funcionouuu legall

  6. José Milton 25 de junho de 2014 - 14:50 Reply

    Olá, muito bom seu tópico!

    Baseado nele resolvemos o problemas de acentuação no PHP e MYSQL com UTF-8.
    Deus abençoe!
    José Milton

  7. orion 15 de outubro de 2014 - 21:16 Reply

    Gostei! ajudou muito já tinha tentado de quase tudo só não a ultima query que foi a que deu resultado… Obrigado!

    • Raphael Monte 7 de novembro de 2014 - 11:01 Reply

      Fico feliz de poder ter ajudado.

  8. Antônio Diniz 27 de novembro de 2014 - 16:07 Reply

    Resolveu meu problema com as benditas acentuações. Muito obrigado.

  9. Ale 3 de dezembro de 2014 - 19:04 Reply

    Estava com esse problema. Embora ao desenvolver no servidor local não aparecesse, mas era carregar no remoto para ele surgir. Suas dicas resolveram. Daqui pra frente será meu padrão. Fico agradecido!

    • Raphael Monte 22 de março de 2015 - 12:38 Reply

      Que bom que o artigo ajudou você.

  10. alle 20 de janeiro de 2015 - 17:52 Reply

    use isso no seu cabeçalho para efeturar a leitura e verifique se seu banco de dados está configurado com UTF-8

  11. Bruno 29 de janeiro de 2015 - 19:36 Reply

    Estava com problema somente no momento de gravar as variáveis php no banco. Este trecho que você postou me ajudou:

    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′);

    Muito Obrigado!

    • Raphael Monte 22 de março de 2015 - 12:36 Reply

      Show!

  12. Eduardo 30 de abril de 2015 - 17:26 Reply

    Cara! Top de linha, funcionou perfeitamente, obrigado.

  13. Danilo Samvi 21 de junho de 2015 - 0:22 Reply

    Bem no meu caso não ajudou. Mas eu descobri outras formas, mas na internet:
    =========================================
    // A função abaixo tira o acentos das palavras, não testei o “ç” e o ” ¨ ”
    //A função serve para pesquisa os dados do banco, quando vc não estar conseguindo resolver o problema dos acentos convertendo, mesmo tendo alterado o colletion do banco
    function tira_acento($str){
    $limpa = preg_replace( ‘/[`^~\'”]/’, null, iconv( ‘UTF-8′, ‘ASCII//TRANSLIT’, $str ) );
    return $limpa;
    }

    //Converte o carácter que dando o problema na pagina para o carácter correto
    $titulo=utf8_decode($_POST[‘titulo’])
    ==================================
    Abraço e a paz a todos.

  14. Justino 24 de junho de 2015 - 8:42 Reply

    Muito obrigado funcionou, andei a bater com a cabeça, mais já xta resolvido

    Valeu

    abraços.

    • Raphael Monte 6 de julho de 2015 - 19:24 Reply

      Show!

  15. Thieles Lopes 1 de julho de 2015 - 14:03 Reply

    Muito Obrigado cara me ajudou muito.

    • Raphael Monte 6 de julho de 2015 - 19:23 Reply

      Quem bom que ajudou!

  16. Lucas DIonei Weizenmann 16 de julho de 2015 - 14:09 Reply

    Relevante! Obrigado

Deixe uma resposta

Your email address will not be published / Required fields are marked *

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>