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:
1 |
CREATE DATABASE NomeBancoDados DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; |
Para alterar um banco de dados já existente pode ser feito com esse comando:
1 |
ALTER DATABASE NomeBancoDados DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; |
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.
1 2 3 4 5 6 7 |
header('Content-Type: text/html; charset=utf-8'); mysql_pconnect($this->_host, $this->_user, $this->_senha); mysql_select_db($this->_bd); 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'); |
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.
1 |
<meta http-equiv="content-type" content="text/html;charset=utf-8" /> |
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));
E não é que funciona? Looool Vlw
Já faz 13 anos e essa dica segue atual… heehehe
Muito obrigado!! Ajudou muitooooo.
Muito obrigado pelo seu comentário.
adonai
Obrigado, deu certo amigão :)
Perfeito, amigo, obrigado!!!
Cara, agradeço muito. Me salvou em um projeto aqui no meu trabalho.
Parabéns!!
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.
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
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!!!
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’);
Onde eu coloco este trecho do código, estou colocando no arquivo config.php mas não está dando certo :( Algué pode me ajudar?
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!
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.
100%. Depois de quase 5 anos a sua solução ainda nos ajuda.
Parabens.
Muito obrigado cara.
Como muitos já comentaram, você salvou minha pele.
Abraços
Grande Dica!!!
Cara, muito obrigado mesmo. Salvou um problemão que eu tinha no sistema e estava há tempo procurando solução. Parabéns!
valeu cara. obrigado!
Mão na roda. Obrigado.
Quebrou um galhão brother, muito obrigado!
Muito obrigado manow, resolveu meu problema.
Se precisasse, eu me cadastraria no site só pra agradecer. Muitíssimo obrigado!
Obrigado, salvou meu código
Cara muito obrigado. Resolveu meu problema e olha que procurei a solução em diversos sites.
Muito mas muito bom mesmo, resolveu o problema de acentuação, valeu amigo
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! :)
vlw ajudo aqui dms
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
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.
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.
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.
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’);
Muito bom esse post, como sou iniciante funcionou perfeito.
obrigado.
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);
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!
Há tempo que tento resolver isto.
Valeu!!!
Muito legal! Parabéns pelo artigo! Mesmo hoje, continua auxiliando.
Abraço.
Funcionou!!!
Já tinha feito de tudo…
Muito Obrigado!!!!
LINDO me livrou de uma dor de cabeça!
WLW manin muito obrigado
Ó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’]);.
Muito obrigado por compartilhar amigo, ajudou demais.
Outra alma salva.
Obrigado
Parabéns pela dica. Acabou de me ajudar. E sei que vai ajudar mais pessoas. Abs.
Meus parabéns! Deu certinho… já tinha tentado várias outras soluções e não havia adiantado… muito obrigado!
Perfeito, parabéns pelo post.
Cara você mereceu palmas kkkkk MUITO OBRIGADO !
Muito Bom!
Você não sabe quanto me ajudou!
Valeu mesmo, consegui resolver tudo por aqui. Parabéns pelo post!
MUITO OBRIGADO POSTEI O CÓDIGO QUE ME PASSOU E FOI COMO NUM PASSE DE MAGICA MINHA PAGINA FICOU PERFEITA VALEU…
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.
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.
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 !”
Dimas, esse caso eu não sei como resolver, creio que deve ter como converter, mas não sei como.
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.
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 !