Solução para Acentuação no PHP / Mysql / HTML

Já fazia mais de ano que eu tentava resolver o problema de acentuação no banco de dados do meu site, sempre que eu mandava inserir algum dado nas tabelas e depois tentava consultar, os caracteres acentuados voltavam irreconhecíveis. após muito pesquisar finalmente consegui achar a solução.

Primeiro tem que criar o banco de dados com o COLLATE utf_general_ci ou então com o utf8_unicode_ci.

Para criar o banco de dados pode ser utilizado esse comando:

Para alterar um banco de dados já existente pode ser feito com esse comando:

Feito isso o banco de dados já esta pronto para trabalhar com as tabelas no padrão utf8 que permite trabalhar com acentos.

Agora vem o mais importante, no script de conexão é necessário inserir os comandos que definem o charset de conexão.

Agora para que a pagina HTML seja exibida corretamente precisa colocar no inicio delas que o charset é o utf-8, com isso você vai resolver um problema que já tirou o sono de muita gente.

67 comentários

  • Fernando

    Obrigado!!! Dez anos se passaram e esse post continua salvando códigos…..

    Como alguns comandos do PHP foram descontinuados, agora seria assim:
    header(‘Content-Type: text/html; charset=utf-8’);
    $servidor = ‘NomeDoSeuServidor’;
    $usuario = ‘NomeDoUsuarioDoBanco’;
    $senha = ‘SenhaDoUsuario’;
    $banco = ‘NomeDoBanco’;
    $link = mysqli_connect($servidor, $usuario, $senha, $banco);
    // Valida a conexão
    if (mysqli_connect_errno()){
    echo “Falha ao conectar no Banco de Dados MySQL: ” . mysqli_connect_error();
    }
    mysqli_query($link, “SET NAMES ‘utf8′”) or die(“Erro na SQL” . mysqli_error($link));
    mysqli_query($link, ‘SET character_set_connection=utf8’) or die(“Erro na SQL” . mysqli_error($link));
    mysqli_query($link, ‘SET character_set_client=utf8’) or die(“Erro na SQL” . mysqli_error($link));
    mysqli_query($link, ‘SET character_set_results=utf8’) or die(“Erro na SQL” . mysqli_error($link));

  • Muito obrigado!! Ajudou muitooooo.

  • Raphael

    Obrigado, deu certo amigão :)

  • Douglas Lazaro Moreira

    Perfeito, amigo, obrigado!!!

  • Luiz Felipe Cirqueira dos Santos

    Cara, agradeço muito. Me salvou em um projeto aqui no meu trabalho.

     

    Parabéns!!

  • Marco

    ATUALIZAÇÃO.

    Adonai, muito obrigado por essa dica..

    Tentei no meu código e não funcionou mas ajudou a achar a solução.

    O que ocorre é que agora o PHP usa o código PDO, como deve saber.

    Assim corrigi meu problema de acentuação seguindo sua dica mas colocando o código PDO abaixo:

    $pdo = new PDO($dsn, $dbuser, $dbpass); // inicia um objeto PDO – conecta ao banco de dados
    $pdo->exec(“SET CHARACTER SET utf8”); // acerta a acentuação vinda do banco de dados

     

    Espero que este post ajude.

    Abraços.

  • Marco

    ATUALIZAÇÃO.

    Adonai, muito obrigado por essa dica.

    Tentei no meu código e não funcionou mas ajudou a achar a solução.

    O que ocorre é que agora o PHP usa o código PDO, como deve saber.

    Assim corrigi meu problema de acentuação seguindo sua dica mas colocando o código PDO abaixo:

    $pdo = new PDO($dsn, $dbuser, $dbpass); // inicia um objeto PDO – conecta ao banco de dados
    $pdo->exec(“SET CHARACTER SET utf8”); // acerta a acentuação vinda do banco de dados

     

    Espero que este post ajude.

    Abraços.

    • Obrigado me ajudou muito, sou iniciante nesta área de desenvolvimento web e estava sofrendo por um bom tempo com isso, e como tem poucas coisas nos fóruns, com conexão PDO, fiquei muito aliviado agora de conseguir.

      Obrigado por compartilhar seu conhecimento.

  • Parabéns por compartilhar seu conhecimento, me ajudou demais. valeu

  • Amanda Rios Uitska

    Adonai, se você soubesse o quanto eu procurei para uma solução que realmente funcionasse para esse problema saberia o tamanho da minha gratidão agora!!! Muito obrigada por compartilhar seu conhecimento!!!

  • Filipe Augusto

    Valeeeuuu!!!

    Essa parte do código salvou meu projeto.

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

     

     

  • Thiago Thadeu

    Não consegui :(
    minha page ficou em branco!
    nao estou sabendo colocar os códigos :'(

    alguem me ajuda pfv !!!!!

    email: thadeudesouzadias@gmail.com

    dica parece ser boaa!

  • abel faria

    Saudações,

    Parabéns pelo post educativo em php sql , depois de  alguns anos , resolvi também o disturbo dos acentos.

    ç & ção , etc. Muito obrigado.

  • FrankWilson

    100%. Depois de quase 5 anos a sua solução ainda nos ajuda.

    Parabens.

  • Andre Matos

    Muito obrigado cara.

    Como muitos já comentaram, você salvou minha pele.

    Abraços

  • Beto Wagner

    Grande Dica!!!

  • Carlos Telles

    Cara, muito obrigado mesmo. Salvou um problemão que eu tinha no sistema e estava há tempo procurando solução. Parabéns!

  • adriano

    valeu cara. obrigado!

  • Carlos R Sarti

    Mão na roda. Obrigado.

  • Rodrigo

    Quebrou um galhão brother, muito obrigado!

  • Gumercindo Jose

    Muito obrigado manow, resolveu meu problema.

  • Rafael Vilela

    Se precisasse, eu me cadastraria no site só pra agradecer. Muitíssimo obrigado!

  • Pinheiro

    Obrigado, salvou meu código

  • Hugo Leonardo

    Cara muito obrigado. Resolveu meu problema e olha que procurei a solução em diversos sites.

  • Ubira

    Muito mas muito bom mesmo, resolveu o problema de acentuação, valeu amigo

  • Lorena

    Caraaaaaaa, muito muito obrigada!!!
    Decidi aprender php e assim que instalei php/mysql fui testar meu code e pooow, não aparecia meus acentos “/
    Fiz uma pesquisa rápida e encontrei seu post.
    Nem precisei criar o db, só adicionei no meu arquivo .php a linha:

    Muito obrigada por compartilhar seu conhecimento. Continue assim!
    Grande abraçoooooo! :)

  • WILLIAN DA ROCHA LOPES MANUCELLO

    vlw ajudo aqui dms

  • Marcos

    Cara muito bom, parabéns e obrigado pela dica. Resolveu meu problema

  • Boa noite!!
    O site é ótimo Adonai, resolveu um problemão aqui. Entretanto eu gostaria de fazer um curso de PHP e mysql mas vim para RJ a pouco tempo e não conheço muito por aqui. Alguns colegas do trabalho indicaram o curso adv http://www.cursoadv.com.br vc conhece? tem referencias? agrdeço desde já

    Laura

  • marcos kim

    Você me salvou cara. Muito obrigado mesmo.
    Tentei de tudo que na net. Sua solução nem bateu na trave. Foi um Golaço.
    Forte abraço.

  • Morfeusisten

    Olá Adonai,

    Estou como o mesmo problema de acentuação em um site worpress, mas como sou iniciante, gostaria de saber o local em que devo insirir esse código que você postou.

    Exemplo: 1o) Cpanel > 2o) depois pasta tal > 3o) depois arquivo tal > E daí por diante…

    Obrigado!

  • EXCELENTE post. Muito obrigado. São raras as pessoas e suas soluções serem utilizadas e funcionarem de forma rápida e sem problema.

    Que Deus continue lhe abençoando de sabedoria e saúde. Amém.

  • Rodrigo

    Senhores, apesar de ter resolvido para a maioria…no meu caso não rolou…

    Minha base é utf8_unicode_ci

    Utilizei na minha página php em questão:
    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’);

    E no meu header.php (Estou usando um template WordPress, por isso essa parte fica no header.php) utilizei:
    header(‘Content-Type: text/html; charset=utf-8’);
    e na parte HTML do código também…

    Adicionalmente, também tentei no resultado da consulta o seguinte

    Olhando diretamente na base, o cadastro desejado aparece com a acentuação correta e o resto dos textos de minha página WordPress que “não” são consultas no mySQL aparecem com acentuação corretas.

    No wordpress uso o plugin PHP-Exec (Não sei se isso tem relação)

    Alguma luz?

  • Estimados amigos.
    Estou com o mesmo problema na pesquisa de palavras com acentos. Já tentei as vossas dicas mas não resultou.
    O site em causa é: http://www.liturgia.pt/martirologio
    Se introduzirem um nome (de pessoa, por exemplo pedro) a pesquisa funciona, mas se o nome for “tomás” não resulta.

    A tabela da BD está em UTF-8_general_ci bem como

    Na connecção à BD tenho:

    header(‘Content-type: text/html; charset=UTF-8’, true);
    $hostname_cnn_martirologio = “www.liturgia.pt”;
    $database_cnn_martirologio = “aaaa_bd”;
    $username_cnn_martirologio = “sdrewacr”;
    $password_cnn_martirologio = “password”;
    $cnn_martirologio = mysql_pconnect($hostname_cnn_martirologio, $username_cnn_martirologio, $password_cnn_martirologio) or trigger_error(mysql_error(),E_USER_ERROR);
    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’);

    No PHP onde está o SQL tenho assim:

    $colname_rc_pesq = “-1”;
    if (isset($_POST[‘search’])) {
    $colname_rc_pesq = utf8_decode($_POST[‘search’]); //utf8_decode converte a string para caracteres utf8
    $colname_rc_pesq = strtolower($colname_rc_pesq);//converte a string de pesquisa em minúsculas
    }
    mysql_select_db($database_cnn_martirologio, $cnn_martirologio);
    $query_rc_pesq = sprintf(“SELECT * FROM elogios_2 WHERE (nome) like _utf8 %s COLLATE utf8_unicode_ci”, GetSQLValueString(“%” . $colname_rc_pesq . “%”, “text”));
    $rc_pesq = mysql_query($query_rc_pesq, $cnn_martirologio) or die(mysql_error());
    $row_rc_pesq = mysql_fetch_assoc($rc_pesq);
    $totalRows_rc_pesq = mysql_num_rows($rc_pesq);

    Se alguém me puder ajudar, agradeço.

  • wylker

    Eduardo o problema da sua conexão e que na senha ta colocando apenas ” e tem que colocar ” ficando assim.

    define(‘HOST’,’localhost’);
    define(‘USER’,’root’);
    define(‘PASSWORD’,”);
    define(‘DB’,’banco’);

  • Gilvanez

    Muito bom esse post, como sou iniciante funcionou perfeito.

    obrigado.

  • Eduardo

    Não foi na mensagem anterior…

    define(‘BD_USUARIO’, ‘root’);
    define(‘BD_SENHA’, ”);
    define(‘BD_NOME’, ‘ana_maga’);

    mysql_connect(‘localhost’, BD_USUARIO, BD_SENHA);

    mysql_select_db(BD_NOME);

  • Eduardo

    Olá, sou iniciante em php, me desculpe a ignorância mas não consegui usar o seu comando.
    Eu me conecto usando esse comando:

    Se não for pedir demais você poderia me dizer como devo fazer?
    Ele acusa o erro ao colocar a senha (Como não tem eu usei as ”).
    Desde já agradeço!

  • Marco Teixeira

    Há tempo que tento resolver isto.
    Valeu!!!

  • Muito legal! Parabéns pelo artigo! Mesmo hoje, continua auxiliando.
    Abraço.

  • Adriano

    Funcionou!!!

    Já tinha feito de tudo…

    Muito Obrigado!!!!

  • Gabriel

    LINDO me livrou de uma dor de cabeça!

  • Marcos Viana

    WLW manin muito obrigado

  • Rafael

    Ótimo! Simplesmente ótimo!

  • Tentei os passos acima mas não adiantou totalmente. Ainda tive que decodificar o conteúdo do post em utf o que não faz mt sentido visto que tudo está em UTF8 mas enfim foi minha salvação. Quem está com problemas salvando POST e não conseguiu resolver, tente com essa linha. $postado=utf8_decode($_POST[‘posttitle’]);.

  • Leonardo

    Muito obrigado por compartilhar amigo, ajudou demais.

  • Jefferson

    Outra alma salva.

    Obrigado

  • lucas

    Parabéns pela dica. Acabou de me ajudar. E sei que vai ajudar mais pessoas. Abs.

  • Vitor

    Meus parabéns! Deu certinho… já tinha tentado várias outras soluções e não havia adiantado… muito obrigado!

  • Fernando

    Perfeito, parabéns pelo post.

  • Petrony Pimentel

    Cara você mereceu palmas kkkkk MUITO OBRIGADO !

  • jonalan

    Muito Bom!

    Você não sabe quanto me ajudou!

  • Enio

    Valeu mesmo, consegui resolver tudo por aqui. Parabéns pelo post!

  • marco

    MUITO OBRIGADO POSTEI O CÓDIGO QUE ME PASSOU E FOI COMO NUM PASSE DE MAGICA MINHA PAGINA FICOU PERFEITA VALEU…

  • dimasguimaraes

    Consegui, resolvi o meu problema de acentuação com CKEDITOR – PHP e MYSQL.
    Se alguém precisar de ajuda me avise, que posto a solução.

  • dimasguimaraes

    Não sei se tem como, mas descobri uma coisa importante que ajudar as outras pessoas.

    No meu caso eu tenho uma tabela noticias com vários campos só para ilustrar a situação:manhete => text
    integra => text
    situação => text

    em manchete e situação os dados vem de uma text area com o editor de texto ckeditor, e em situação os dados vem de um campo text comum do formuario.

    Ao alterar eu consegui inserir a informação em situação com todos os acentos corretos, mas nos campos onde eu uso o editor o problema continua, tavez eu tenha que inserir o header(‘Content-type: text/html; charset=UTF-8’, true); em algum lugar do script do ckeditor.

    Se alguém souber a respeito e puder compartilhar eu agradeço de coração.

     

    Obrigado.

     

  • dimasguimaraes

    Só mais uma dúvida, estou na mesma situação que o Julio, conforme citado abaixo.
    Montei um sistema onde cadastro noticias e outros assuntos, fui carregando o banco deixando a acentuação no banco errada mesmo, agora consegui cadastrar com a acentuação correta, existe alguma forma de corrigir o que já foi cadastrado automaticamente ?
    Por enquanto estou usando o sistema que eu montei para alterar os texto, mas são muitas noticias desde o começo do ano.

    Mais uma vez muito obrigado.

    ” Reparei que nos cadastros os acentos e caracteres especiais estavam sendo perdidos, mas resolvi continuar o projeto e só quando terminasse visse isso.Esqueci … defeni como pronto … recebi o pagamento e o usuário reparou isso no primeiro dia, com 50 pessoas prontas para trabalhar e sem poder. Em 10 minutos com sua ajuda foi resolvido.Infelixzmente não posso lhe remunerar pela ajuda, mas leve na sua conta uma grande estrela no peito quando for prestar as contas com DEUS !  :>)VALEU !”

     

  • dimasguimaraes

    Muito Obrigado !!!
    Seus esclarecimentos resolveram 6 meses de googladas em minha vida.
    kkkkkk

  • Adonai, muitíssimo obrigado! de fato você me livrou de um problema que por vezes me tirou o sono! busquei muitos fóruns até achar a solução, obrigado mesmo!

  • Fico feliz que a minha dica te ajudou, eu levei alguns meses até descobrir essa solução, foi uma dor de cabeça, mas o meu caso não chegava a ser sério.

  • julioc2s

    Esse post me livrou de um problema sério !Eu sou programador em .NET e possuo um certo conhecimento em PHP. Reparei que nos cadastros os acentos e caracteres especiais estavam sendo perdidos, mas resolvi continuar o projeto e só quando terminasse visse isso.Esqueci … defeni como pronto … recebi o pagamento e o usuário reparou isso no primeiro dia, com 50 pessoas prontas para trabalhar e sem poder. Em 10 minutos com sua ajuda foi resolvido.Infelixzmente não posso lhe remunerar pela ajuda, mas leve na sua conta uma grande estrela no peito quando for prestar as contas com DEUS !  :>)VALEU !

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *