Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Cintia_Ribeiro

Probelmas com UTF8

Recommended Posts

Galera, estou com problemas com caracteres especiais. O problema é o seguinte. Estou desenvolvendo um sistema (php, mysql, html, twig), local ele funciona normalmente, os dados cadastrados cadastram de forma certa e na hora de listar, tbm lista de forma correta. Esse banco já está online.

Quando subo o sistema, esses dados com caracteres especiais não listam (mas estão no banco). Se eu fizer um cadastro com caracteres especiais no sistema online, ele cadastra de forma errada e lista de forma certa.

Não sei o que pode ser, me ajudem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como estão os arquivos? UTF ou ANSI? Como está a conexão com o BD?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem um 'manual' que William Bruno fez:

http://wbruno.com.br/ajax/problemas-acentuacao-ajax-como-resolver/

A explicação engloba e exemplifica sobre o que o ESerra questionou e mais algumas possibilidades do erro estar acontecendo.

Alem de todo os exemplos dele recomendo setar qual a conexão diretamente na conexão:

Em PDO um exemplo:

$dbh = new PDO('mysql:host=localhost;dbname=gd;charset=utf8', $user, $pass);
$dbh->exec("set names utf8"); //Garante UTF

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gelara está td como utf8. Tag html, header do php e banco de dados. O que me deixa mais intrigada é que só dá problema quando o sistema está em produção, em desenvolvimento isso não acontece. Tbm verifiquei o meu editor e o msm está como utf8. Eu não sei mais o que pode ser.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A conexão com o banco de dados também está em utf8? Tem certeza? Você especificou o encode na abertura da conexão?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Classe conexao está assim:

 

class Conexao {

public static function conectar() {

$config = new \Doctrine\DBAL\Configuration();
$parametros = array(
'dbname' => 'XXXXX',
'user' => 'XXXXX',
'password' => 'XXXXX',
'host' => 'XXXXX',
'port' => 3306,
'charset' => 'utf8',
'driver' => 'pdo_mysql',

);

try {
$instance = \Doctrine\DBAL\DriverManager::getConnection($parametros, $config);
return $instance;
} catch (PDOException $e) {
echo $e->getMessage();
}


}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se a versão do PHP for anterior ao 5.3.6, você deverá, após a abertura da conexão usar o set names:

$conexao->exec("set names utf8");

Pela sua descrição de que cadastra errado no banco, algo não está em utf-8...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera, mudei a minha forma de conectar.

Antes estava assim:

class Conexao {

	public static function conectar() {

		$config = new \Doctrine\DBAL\Configuration();
		$parametros = array(
			'dbname' => 'XXX',
			'user' => 'XXX',
			'password' => 'XXX',
			'host' => 'XXX',
			'port' => 3306,
			'charset' => 'utf-8',
			'driver' => 'pdo_mysql',

		);
      
		 try {
		    $instance = \Doctrine\DBAL\DriverManager::getConnection($parametros, $config);

            return $instance;
		 } catch (PDOException $e) {
		    echo $e->getMessage();
		 }


	}
}

Agora está assim

class Conexao {

     private static $instance;

     private function __construct(){

     }

     // Método estático - acessível sem instanciação.
     public static function getInstance()
     {
         // Garante uma única instância. Se não existe uma conexão, criamos uma nova.
         if(!isset(self::$instance)){
             try{
                  self::$instance =  new \PDO('mysql:host=XXX;dbname=XXX;charset=utf8','XXX','XXX');
                 
                self::$instance->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
                 // Garante que os dados sejam armazenados com codificação UFT-8.
                 self::$instance->exec('SET NAMES utf8');
             }catch (\PDOException $e){
echo $e->getMessage();
             }
         }
         // Retorna a conexão.
         return self::$instance;
     }

 }

Dessa forma funcionou :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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