Ir para conteúdo

Recommended Posts

Estou tendo problemas com acentuação, das informações que estão no banco de dados.

 

No servidor que está na produção atualmente, rodando uma Intranet, está funcionando normalmente, numa versão mais antiga no XAMPP.

MySQL: 5.1.41

PHP: 5.4

Collation do BD: utf8_general_ci

 

Segue, como está no banco de dados, e como aparece no HTML.

 

---

 

Porém, formatei o meu computador recentemente, e nele instalei a versão mais atual do XAMPP, com PHP 8.2.

Criei o bando de dados também com a mesma collation, utf8_general_ci, porém no meu localhost, os acentos aparecem todos zuados.

 

Uma coisa que percebi, é que no servidor da Intranet, no banco de dados, os acentos ficam zuados, mas no PHP/HTML mostra os acentos corretamente.

Já no meu computador, os acentos ficam com problema.

 

É alguma relação com a versão do MySQL? É a Collation errada que estou usando?

 

Obrigado.

BD.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

@tetsuo boa tarde,

 

1) coloquei em anexo (na abertura do tópico), como está no banco de dados, tanto no servidor onde está rodando atualmente (versão mais antiga) e como está no meu computador (versão mais nova).

 

2) vou alterar na conexão pra fazer um teste

 

3) usando mysqli

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mais um detalhe

 

No servidor da intranet, grava no banco de dados com os caracteres esquisitos (como coloquei em anexo ali), porém quando mostro a informação do banco de dados, ficam corretos.

 

Mas no meu server localhost aqui, não consegue mostrar os acentos.

Os dados que já tem no banco de dados, estou com esse problema nos acentos. Porém se eu cadastrar um novo registro, eles ficam corretos, pois grava no banco de dados os acentos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!
Primeira sugestão é ajustar o texto no seu database, para que visualize corretamente.
Como o colega sugeriu acima, no mysqli, se define utf-8 para a conexão assim:
 

// definição de variáveis para conexão
$host     = 'localhost';      // servidor
$user     = 'root';           // nome do utilizador
$pass     = 'my-secret-pw';   // senha ou password
$database = 'imasters';  	  // nome da base de dados

// estabelecer conexão:
$sqli = new mysqli($host, $user, $pass);

// definir o padrão de caracteres
$sqli->set_charset('utf8');

// selecionar/abrir o banco de dados para trabalhar
$sqli->select_db($database)

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@washalbano bom dia.

 

Fiz como você falou, o problema persiste.

Eu acredito que seja algo com as versões mais novas do MySQL, do XAMPP.

 

Pois os bancos de dados são iguais, o Collation iguais.

 

Minha preocupação, é quando eu atualizar no servidor da intranet, para as versões mais novas, vai dar bug na acentuação em todos os dados já cadastrados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Me parece que não adianta nada agora tentar corrigir a codificação de caracteres, pois o problema ocorreu quando os dados foram registrados.

Vale ressaltar também que a codificação da aplicação também deve ser definida na mesma codificação usada pelo charset.

Detalhes como a própria criação da tabela também vão ter grande relevância, exemplo:

CREATE TABLE `exemplo` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `texto` varchar(100) NOT NULL DEFAULT '',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

 

De qualquer forma um simples solução para codificação de caracteres é nunca usar acentuação e sim entidades das mesmas, exemplo:

$salvar = htmlentities('João é um menino');

/*
No banco de dados fica salvo assim:
- João é um menino

Mas sempre que for exibido no html não importa qual a codificação será:
- João é um menino
*/

Se fosse meu caso e não ´pudesse reiniciar o banco de dados estaria a criar um mapa de caracteres desses que estão "diferentes".

Criaria um programa - que automaticamente faria a leitura > converteria os estranhos para seu estado real > faria a atualização dos registros usando a função htmlentities.

Lógico que alteraria a aplicação para que quando algum registro seja inserido ou alterado passe pela função htmlentities.

Então nunca mais teria problemas relacionados ao charset seja lá qual for a codificação usada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por Nightmare SEP
      Bom dia,
      Estou com problema com acentos no PHPMailer (classe para envio de e-mails). Conforme anexo.
       
      Na configuração do e-mail de destinatário, o nome do destinatário tem acento, quando enviado o e-mail, ao invés de aparecer o nome, aparece aqueles caracteres ali (conforme anexo).
      Acontece o mesmo se eu coloco acentuação no assunto do e-mail.
       
      require("../phpmailer/class.phpmailer.php"); $mail = new PHPMailer(); $mail->IsHTML(true); $mail->CharSet = 'utf-8';  
      Será que pode ser algo no php.ini? Lá eu vi que está marcado o default_charset = 'utf-8'. Ou não tem nada a ver?
       
      EDITANDO:
      Funciona os acentos no corpo do e-mail. Só não funciona no ASSUNTO e no NOME DO DESTINATÁRIO.
       

    • Por Xevious
      Tenho dois sites feitos com php, um é em laravel e o outro básico.
      E eles usam duas cópias do mesmo banco de dados.
       
      Mas um, oq é em Laravel, os acentos dos produtos, que vem do banco de dados, aparecem corretamente.
      No php básico não.
       
      Este que é em php básico, deixei com o mesmo 'meta' que o que é em Laravel.
      Mas não mudou o resultado.
       
      <html lang="pt">
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    • Por ConteudoAnimal.com.br
      Olá Pessoal,

      Alguem pode me ajudar 

      Fiz um formulário em https://www.conteudoanimal.com.br/noticias/assessoria.php que manda os dados para https://www.conteudoanimal.com.br/noticias/adicionar_noticia.php
      E qualquer acentuação é trocada por ?

      Código das páginas:

      Assessoria.php
       
      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
      <html>
      <head>
      <title>Assessoria de Imprensa - Inclusão de Notícias</title>
      <script type="text/javascript" src="../ckeditor/ckeditor.js"></script>
      <script src="sample.js" type="text/javascript"></script>
      <link href="sample.css" rel="stylesheet" type="text/css" />
      <link href="../css/estilos.css" rel="stylesheet" type="text/css" />
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head>
      <body>
      <div id="geral"><div id="regiao_1"><ul><li id="link_mail"><a href="https://www.conteudoanimal.com.br/faleconosco/inclusao.php">Fale Conosco</a></li><li id="link_faq"><a href="https://www.conteudoanimal.com.br/faq.php">FAQ </a></li><li id="link_indique"><a href="https://www.conteudoanimal.com.br/marketing/banner.php">Anuncie</a></li><li id="link_sitemap"><a href="https://www.conteudoanimal.com.br/marketing/website.php">Como Hospedar</a></li></ul>    </div>
      <div id="regiao_2"><div id="menu_principal"><ul><li id="top"><a href="https://www.conteudoanimal.com.br/default.php" title="P&aacute;gina Inicial">CONTEÚDO ANIMAL</a></li><li id="link_racas"><a href="https://www.conteudoanimal.com.br/info/info.php" title="Ra&ccedil;as &amp; Esp&eacute;cies">RA&Ccedil;AS &amp; ESP&Eacute;CIES</a></li><li id="link_shopping"><a href="https://www.conteudoanimal.com.br/anuncios.php" title="Anúncios" target="new" rel="nofollow">Anúncios</a></li><li id="link_colunas"><a href="https://www.conteudoanimal.com.br/colunas/colunas.php" title="Ver Colunas"> COLUNAS</a></li><li id="link_esportes"><a href="https://www.conteudoanimal.com.br/info/esportes.php" title="Esportes">ESPORTES</a></li><li id="link_noticias"><a href="https://www.conteudoanimal.com.br/noticias/todas.php" title="Not&iacute;cias">NOT&Iacute;CIAS</a></li><li id="bottom"></li></ul></div>
      <div id="box_banner_topo"></div><!-- Fim código do banner topo -->
      <div id="box_pesquisa">
      <!-- SiteSearch Google -->
      <p>Digite aqui a palavra-chave.</p><form action=" https://www.conteudoanimal.com.br/busca.php" id="Form1"><input type="hidden" name="domains" value="www.conteudoanimal.com"><input type="text" name="q" size="20" maxlength="255" id="campo_pesquisa" value=""><br/><input name="sitesearch" type="radio" class="radio" value="" />Web<input name="sitesearch" type="radio" class="radio" value="www.conteudoanimal.com" checked="checked">Conte&uacute;do Animal<input class="bt_pesquisa" type="submit" name="sa" value="Pesquisar">
      <!-- Campos hidden --><input type="hidden" name="cx" value="partner-pub-7589629526688718:vocfdf-73ai" /><input type="hidden" name="forid" value="1" /><input type="hidden" name="ie" value="ISO-8859-1" /><input type="hidden" name="oe" value="ISO-8859-1" /><input type="hidden" name="cof" value="FORID:11" /><input type="hidden" name="hl" value="pt" /></form>
      <script type="text/javascript" src="https://www.google.com.br/coop/cse/brand?form=cse-search-box&lang=pt"></script>
      <!-- SiteSearch Google --></div></div>
      <div id="regiao_7">    
      <!-- Banner do rodapé - 728x15 -->
      </div>
      <div id="regiao_8"> <div id="lado_esquerdo"><ul id="menu_racas"><li id="link_caes"><a href="https://www.conteudoanimal.com.br/info/caes/caes.php">C&atilde;es</a></li><li id="link_gatos"><a href="https://www.conteudoanimal.com.br/info/gatos/gatos.php">Gatos</a></li><li id="link_cavalos"><a href="https://www.conteudoanimal.com.br/info/cavalos/cavalos.php">Cavalos</a></li><li id="link_peixes"><a href="https://www.conteudoanimal.com.br/info/peixes/peixes.php">Peixes</a></li><li id="link_passaros"><a href="https://www.conteudoanimal.com.br/info/passaros/passaros.php">P&aacute;ssaros</a></li><li id="link_outros"><a href="https://www.conteudoanimal.com.br/info/outros/outros.php">Outros</a></li></ul>
      <span class="destaque"><p> </p></span>
      </div>
      <div id="lado_direito">     
      <a href="https://www.conteudoanimal.com.br/"> Home Page </a> &gt; <a href="https://www.conteudoanimal.com.br/noticias/todas.php">Notícias</a> &gt; <a href="#">Assessoria de Notícias</a></p>
      <!-- This <div> holds alert messages to be display in the sample page. -->
      <div id="alerts">
      <noscript>
      <p>
      <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript
      support, like yours, you should still see the contents (HTML data) and you should
      be able to edit it normally, without a rich editor interface.
      </p>
      </noscript>
      </div>
      </p>
      <!-- Área para os textos - -->        
      <h1>Inclusão de Notícias</h1>
      <!-- Use sempre H5 para o título dos textos -->    
      <p><form action="https://www.conteudoanimal.com.br/noticias/adicionar_noticia.php" method="post">
      <table cellpadding="0" cellspacing="0" border="0" bgcolor="#BEBEBE" style="width: 405px">
      <tr bgcolor="#DEDEDE">
      <td align="right" bgcolor="#DEDEDE" class="style1"><b><font face="Verdana, Arial, Helvetica, sans-serif" size="1">Manchete: * </font></b></td>
      <td align="center" width="347"><input value="Título" type="text" id="manchete" name="manchete" size="30" style="font-family: Verdana; font-size: 8 pt; border-style: solid; border-width: 1; width: 246px;" />
      </td></tr>
      <tr bgcolor="#DEDEDE">
      <td align="right" bgcolor="#DEDEDE" class="style1"><b><font face="Verdana, Arial, Helvetica, sans-serif" size="1">Fonte:*</font></b></td>
      <td align="center" width="347"><input id="fonte" value="fonte da notícia" type="text" name="fonte" size="30" style="font-family: Verdana; font-size: 8 pt; border-style: solid; border-width: 1; width: 253px;" />
      </td></tr>
      <tr bgcolor="#DEDEDE">
      <td align="right" bgcolor="#DEDEDE" valign="top" class="style1"><b><font face="Verdana, Arial, Helvetica, sans-serif" size="1">Texto da Notícia* :</font></b></td>
      <td align="center" width="347">
      <textarea cols="80" id="noticia" name="noticia" rows="20" onclick="return Textarea1_onclick()">Copie o texto da notícia direto neste espaço.</textarea>
      <script>
           // This call can be placed at any point after the
           // <textarea>, or inside a <head><script> in a
           // window.onload event handler.
           // Replace the <textarea id="editor"> with an CKEditor
           // instance, using default configurations.
           CKEDITOR.replace('noticia', {
           filebrowserBrowseUrl: '/externo',
           filebrowserUploadUrl: '/externo',
           filebrowserImageBrowseUrl: '/externo',
           filebrowserImageUploadUrl: '/externo',
           filebrowserWindowWidth: 800,
           filebrowserWindowHeight: 800
      });
      function Textarea1_onclick() {
      }
      </script>
      </td>
      </tr>
      <tr bgcolor="#DEDEDE">
      <td align="center" bgcolor="#DEDEDE" colspan="2"><input type="submit" value="Enviar" name="B1" style="font-family: Verdana; font-size: 8 pt; font-weight: bold; background-color: #FFCC00; border-style: solid; border-width: 1" />
      </tr>
      </table>
      </form>
      </p>
      <p align="center">confiras as últimas 5 notícias publicadas<p>
      <?php
       include '/conexao.php';
       $query = "Select id, manchete from noticias order by id desc limit 0,5";
       $result = mysqli_query($connection,$query) or die ("Could not execute query");
       
       while($row = mysqli_fetch_array($result)) {
       extract($row);
       $rs .= '<h4><img src="/images/bullet.gif" alt="bullet"><a href="/noticias/ver.php?id='.$id.'">'.$manchete.'</a></h4>';
       }
       echo $rs;
      ?>
      <br><br>Você vai adicionar um texto pela primeira vez ? Se SIM . Então veja video tutorial abaixo <br> 
      <iframe width="560" height="315" src="//www.youtube.com/embed/TJ6NH4UGsCs" frameborder="0" allowfullscreen></iframe>
      <!-- FIM da área para os textos --> 
      </div>        
      </div>
      <?php include '/bottom.php'; ?>
      </div>
      </body>
      </html>
       
      Adicionarnoticia.php:

       
    • Por halfar
      É aquele velho problema de caracteres estranhos.
       
      Criei minha base e seu conteudo com utf8, e tudo vinha bem sem nenhum problema.
       
      Fiz um backup da base de dados e tive que formatar a maquina.  Fiz as copias em arquivo.sql.
       
      Depois na hora de importar os dados começaram os problemas, os textos ficaram todos com acentuações erradas.
       
      Já revirei a net em procura da solução, mas nada funcionou.
       
      o meu arquivo sql :
      -- Adminer 4.2.5 MySQL dump SET NAMES utf8; SET time_zone = '+00:00'; SET foreign_key_checks = 0; SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'; DROP TABLE IF EXISTS `relatos`; CREATE TABLE `relatos` (   `id` int(2) NOT NULL AUTO_INCREMENT,   `titulo` varchar(70) NOT NULL,   `relato` text NOT NULL,   `data` date DEFAULT NULL,   `autor` varchar(20) NOT NULL,   PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;  
      no banco de dados está como utf8_general_ci.
       
      Na página html está como:
       
       
       
      Peguei um script da net, na hora de se conectar com o banco de dados:
      define('DB_HOST', 'localhost'); define('DB_SCHEMA', 'bdados'); define('DB_USER', 'usuario'); define('DB_PASSWORD', 'senha'); define('DB_ENCODING', 'utf8'); $dsn = 'mysql:host=' . DB_HOST . ';dbname=' . DB_SCHEMA; $options = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, ); if( version_compare(PHP_VERSION, '5.3.6', '<') ){ if( defined('PDO::MYSQL_ATTR_INIT_COMMAND') ){ $options[PDO::MYSQL_ATTR_INIT_COMMAND] = 'SET NAMES ' . DB_ENCODING; } }else{ $dsn .= ';charset=' . DB_ENCODING; } $conn = @new PDO($dsn, DB_USER, DB_PASSWORD, $options); if( version_compare(PHP_VERSION, '5.3.6', '<') && !defined('PDO::MYSQL_ATTR_INIT_COMMAND') ){ $sql = 'SET NAMES ' . DB_ENCODING; $conn->exec($sql); }  
      Na própria tabela tentei alterar também  um dos campos da tabela para latin1_swedish_ci, mas também não funcionou. Neste caso, em uma outra ocasião, em um provedor tive este tipo de problema e bastou fazer isto e resolveu.
       
      Finalizando, o banco de dados do mysql é do laragon, o maria_db....
    • Por alisonalves
      Boa tarde galera. Procurei algumas soluções no fórum mas não obtive sucesso. Por isto estou pedindo ajuda aqui. Tenho um formulário no meu site mas as palavras acentuadas chegam sempre desconfiguradas. O código que estou usando é este abaixo. Podem me indicar onde estou errando? Desde já agradeço o apoio.
       
      <html lang="pt-br">
      <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      </head>
      <body>
      <?
      $headers = "Content-Type: text/html; charset=UTF-8";
      $mensagem = "Nome: ".$_POST['nome']." \n";
      //email que o usuário preencheu
      $mensagem .= "Email: ".$_POST['email']." \n";
      $mensagem .= "Mensagem: ". $_POST['mensagem'];
      $headers = "";
      //email do seu domínio hospedado
      $emailsender = "contato@exemplo.com.br";
      //email de quem vai receber
      $emaildestinatario = "contato@exemplo.com.br";
      $assunto = "contato pelo site";

      // Envio dos dados do Formulário para seu e-mail:
      if(!mail($emaildestinatario, $assunto, $mensagem, $headers ,"-r".$emailsender))

      // Se for Postfix - hospedagem linux
      $headers .= "Return-Path: " . $emailsender . $quebra_linha; 
      }
      echo '
      <script type="text/JavaScript">
      alert("Seu e-mail foi enviado com sucesso. Obrigado");
      location.href="sucesso.html"
      </script>
      ';
      ?>
      </body> 
      </html>
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.