Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa noite pessoal!
Sou novo no fórum, então desde já peço desculpas se eu não souber exemplificar bem minha dificuldade e também agradeço muito por todos que puderem ajudar.
Pesquisei inúmeros posts a respeito deste assunto (Erro de Acentuação ao Gravar no MySQL) e segui muitas dicas, mas meu problema está persistindo.
Para facilitar a ajuda e o entendimento, criei um arquivo PHP de testes. (Seguindo algumas idéias que encontrei no fórum).
Vamos lá!
Situação do arquivo:
1. Este arquivo PHP está codificado e com <meta> em UTF-8.
2. O banco de dados e todas as tabelas estão com charset UTF-8 e collation utf8_unicode_ci
3. Fiz o teste com a função mysql_client_encoding() e retornou UTF-8
Obs.: Utilizei o EditPad para verificar a codificação do arquivo.
Erro:
Quando através do formulário envio um nome/palavra com acentos (ex.: João), está sendo gravado no banco de dados "Joòo". Mesmo estando gravado desta forma no banco de dados, ao resgatar do banco para exibir na página via php, o resultado impresso na página é "João".
Se eu utilizar o próprio terminal do mysql (S.O. Windows) para inserir o nome "João", logo é gravado corretamente. No entanto, se eu quiser exibir na página via php, o resultado impresso é "JoÆo".
Por curiosidade, fiz o teste enviando "JoÆo" pelo próprio formulário e foi gravado corretamente no banco de dados. rsrs
Abaixo segue o código:
<?php header("Content-Type: text/html; charset=UTF-8",true); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="pt-br" xml:lang="pt-br">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Teste</title>
</head>
<body>
<form action="bd.php" method="post">
Nome:
<input type="text" name="nome">
<input type="submit" value="Enviar">
</form>
<?php
$op = $_GET['op'];
$host = "localhost";
$usuario = "root";
$senha = "admin";
$bd = "banco";
$nome = $_POST['nome'];
$conexao = mysql_connect($host, $usuario, $senha);
mysql_select_db($bd);
mysql_set_charset('utf8', $conexao);
ini_set('default_charset','UTF-8');
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');
if ($nome) {
$query = "insert into teste values (NULL, '".$nome."')";
$resultado = mysql_query($query,$conexao);
}
$query = "Select * from teste order by idteste desc limit 10";
$resultado = mysql_query($query,$conexao);
while ($linha = mysql_fetch_array($resultado)){
echo $linha[0]." - ".$linha[1]."<br>";
}
?>
Já utilizei utf8_encode() e utf8_decode() e eles até pioram a situação.
Também já tentei transformar tudo em ISO-8859-1, mas o erro é sempre o mesmo.
Já estou começando a pensar que pode ser alguma configuração do MySQL.
Bom gente, não sei mais como tentar resolver este problema.
Quero agradecer à colaboração de todos. :)
Carregando comentários...