Ir para conteúdo

POWERED BY:

Arquivado

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

Thiago - Bulfaitelo

Problemas caractere UTF-8

Recommended Posts

Olá pessoal novamente venho perturbar vocês, então:

Meu problema é o seguinte,

Em um formulário que está recebendo valores do banco de dados está os caracteres especiais que vem do banco estão incorretos vindo com <?>.

Todos os arquivos estão com a codificação UTF-8,

1ª OBS.: Quando tiro retiro o Cabeçalho, <meta charset="utf-8"> os dados do banco vem corretamente porem todo o html fica incorreto.

2ª OBS.: Quando a pagina está sendo carregada os caracteres na minha função de depurar (que é exibida antes da tag <html>) os caracteres por uma fração de segundos são carregados corretamente, porem assim que a pagina está carregada eles voltam a ficar incorretos

 

Exemplo do erro:

~~a~~���

 

Alguma dica o ideia do que pode ser.

 


Abaixo estarei colocando alguns dados provavelmente pertinentes:


Header

<!DOCTYPE html>
<html lang="PT-Br">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">    
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">    

    <!-- Bootstrap -->
    <link href="css/bootstrap.min.css" rel="stylesheet">

    <!-- Custom CSS -->
    <link href="css/landing-page.css" rel="stylesheet">

    <!-- Custom CSS -->
    <link href="css/style.css" rel="stylesheet">
    <!-- Theme -->
    <!-- <link href="css/bootstrap-theme.min.css" rel="stylesheet" > -->
    <!-- Custom Fonts -->
    <link href="http://fonts.googleapis.com/css?family=Lato:300,400,700,300italic,400italic,700italic" rel="stylesheet" type="text/css">
	<!-- Favicon  -->
	<link rel="icon" type="image/ico" href="img/favicon_qiestudo_64.ico" />
    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
    <title>Admin Cadastrar Questionário - QiEstudo</title></head>

FOOTER

	    <!-- jQuery -->
    <script src='js/jquery.js'></script>
    <!-- Bootstrap Core JavaScript -->
    <script src='js/bootstrap.min.js'></script> 
    <!-- Mask Plugin -->
    <script src="js/jquery.maskedinput.min.js"></script>
    <!-- MÓDULO APLICATIONS -->
    
	
  
    <!-- Analytcs -->
    <script>
      (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
      (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
      m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
      })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
      ga('create', 'UA-60734206-1', 'auto');
      ga('send', 'pageview');
    </script>    
    <!-- FB -->
    <div id='fb-root'></div>
    <script>(function(d, s, id) {
      var js, fjs = d.getElementsByTagName(s)[0];
      if (d.getElementById(id)) return;
      js = d.createElement(s); js.id = id;
      js.src = '//connect.facebook.net/pt_BR/sdk.js#xfbml=1&appId=389312774574990&version=v2.0';
      fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));</script>
    <!-- SIS JS Conf -->
	<script src="js/sis.js"></script>	
    <!-- SIS Ajax -->
	<script src="js/sis_ajax.js"></script>
	
</body>

Desde já agradeço toda e qualquer ajuda :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Experimente usar o utf8_encode, pois se sem o cabeçalho funciona é provável que a codificação não seja utf8.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Experimente usar o utf8_encode, pois se sem o cabeçalho funciona é provável que a codificação não seja utf8.

 

Sim realmente utilizar o utf8_encode funciona, meu banco já está em "utf8_general_ci" teoricamente ele está em utf8, não ?

O problema de utilizar utf8_encode vai se ruim, pois eu por exemplo trabalho sempre com vetores e vetores dentro de vetores, assim eu teria que fazer um método só para tratar isso, e assim gerando mais um peso ao processo.

 

não a algo que eu possa utilizar para que resolva em todo sistema de uma vez. Lembrando que o sistema ainda está em desenvolvimento então facilmente posso alterar código ou banco.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

O fato do seu banco estar como utf8_* não significa que os dados gravados nele estão de fato em utf8... o problema neste ponto está na entrada dos dados, os dados estão vindo de uma fonte que não está em utf8, a solução seria você codificar em utf8 antes de salvar no BD então.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O fato do seu banco estar como utf8_* não significa que os dados gravados nele estão de fato em utf8... o problema neste ponto está na entrada dos dados, os dados estão vindo de uma fonte que não está em utf8, a solução seria você codificar em utf8 antes de salvar no BD então.

 

Estou realizando testes aqui,

 

setei na conexão com o banco assim:

 

$this->pdo = new PDO("{$this->type}:host={$this->host};dbname={$this->db};charset=utf8", $this->user, $this->pass); 			

Colocando o Charset na conexão com o banco resolveria Todos os meus problemas, porem eu já avia feito isso a um bom tempo atrás . porem tenho um problema com a senha, por exemplo a minha senha eu salvo em 2 partes no banco com caracteres especiais e estes quando eu seto o valor utf8 no banco eles não Funcionam corretamente.

Exemplo de uma Senha:

  'ps1' => string 'hÀñÜi•‚¤:!}ÆsýÈÐ' (length=16)
  'ps2' => string '®æ€' (length=5)

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, experimente assim:

 

  • Defina a codificação em seu HTML da forma padrão
    <meta charset="UTF-8">

 

  • Nas tabelas do seu banco de dados e nos campos defina a codificação como "utf-8-unicode-ci".

 

  • Agora quando for acessar o banco de dados, seja para obter os dados ou para gravar dados no banco, use este código:
$conexao = mysqli_connect('servidor', 'usuario', 'senha', 'banco_de_dados');
// Altera codificação de resultados para UTF-8
mysqli_query($conexao, "SET NAMES 'utf8'");
mysqli_query($conexao, 'SET character_set_connection=utf8');
mysqli_query($conexao, 'SET character_set_client=utf8');
mysqli_query($conexao, 'SET character_set_results=utf8');

Isso deve resolver seu problema :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

 

No meu caso ocorreu isso uma vez. De tanto eu quebrar a cabeça eu descobri o que era na verdade. Se o seu arquivo do formulário - por exemplo: formulario.php - estiver em UTF, você não terá este problema.

 

Lx9sJmS.jpg?1

 

Este programa é o notped, e sempre quando envio os arquivos para o site envio em UTF-8 sem BOM, pois, assim evito estes problemas.

 

Não sei se pode ser o mesmo citado por você, mas, só verifique se o seu arquivo .php ou .htmlnão é ANSI. :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, experimente assim:

 

  • Defina a codificação em seu HTML da forma padrão
    <meta charset="UTF-8">

 

  • Nas tabelas do seu banco de dados e nos campos defina a codificação como "utf-8-unicode-ci".

 

  • Agora quando for acessar o banco de dados, seja para obter os dados ou para gravar dados no banco, use este código:
$conexao = mysqli_connect('servidor', 'usuario', 'senha', 'banco_de_dados');
// Altera codificação de resultados para UTF-8
mysqli_query($conexao, "SET NAMES 'utf8'");
mysqli_query($conexao, 'SET character_set_connection=utf8');
mysqli_query($conexao, 'SET character_set_client=utf8');
mysqli_query($conexao, 'SET character_set_results=utf8');

Isso deve resolver seu problema :)

 

Rapais resolver sim mais volta ao problema da senha todos os dados são salvos corretamente porem a senhas que por exemplo seriam:

'ps1' => string '½â²0Sœ<vkj,' (length=16)
'ps2' => string '„S·#' (length=5)

Mas quando vou inserir no banco através do bindValue(); elas não estão sendo salvas. somente fica em branco

 

Olá!

 

No meu caso ocorreu isso uma vez. De tanto eu quebrar a cabeça eu descobri o que era na verdade. Se o seu arquivo do formulário - por exemplo: formulario.php - estiver em UTF, você não terá este problema.

 

Lx9sJmS.jpg?1

 

Este programa é o notped, e sempre quando envio os arquivos para o site envio em UTF-8 sem BOM, pois, assim evito estes problemas.

 

Não sei se pode ser o mesmo citado por você, mas, só verifique se o seu arquivo .php ou .htmlnão é ANSI. :D

 

Oi Robson eu utilizo o Sublime Text 3 ele também faz isso ,e sim todo os meus código estão em UTF-8 sem BOM

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Rapais resolver sim mais volta ao problema da senha todos os dados são salvos corretamente porem a senhas que por exemplo seriam:

'ps1' => string '½â²0Sœ<vkj,' (length=16)
'ps2' => string '„S·#' (length=5)

Mas quando vou inserir no banco através do bindValue(); elas não estão sendo salvas. somente fica em branco

 

 

Rapais resolver sim mais volta ao problema da senha todos os dados são salvos corretamente porem a senhas que por exemplo seriam:

'ps1' => string '½â²0Sœ<vkj,' (length=16)
'ps2' => string '„S·#' (length=5)

Mas quando vou inserir no banco através do bindValue(); elas não estão sendo salvas. somente fica em branco

 

 

Entendo. Você está utilizando um banco de dados MySQL? Por que não insere os valores no banco através do comando "INSERT"?

mysqli_query($conexao, "INSERT INTO `tabela`(`campo`) VALUES ('valor_do_campo')");

Isso resolveria seu problema com a codificação, junto com o exemplo que eu dei mais acima... ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 

Entendo. Você está utilizando um banco de dados MySQL? Por que não insere os valores no banco através do comando "INSERT"?

mysqli_query($conexao, "INSERT INTO `tabela`(`campo`) VALUES ('valor_do_campo')");

Isso resolveria seu problema com a codificação, junto com o exemplo que eu dei mais acima... ;)

Estou utilizando um Insert sim mais utilizando o PDO como médodo não o mysqli. O problema é que parece que os caracteres gerados para a senha não são salvos no banco quando eu determino o charsaet, porem todos os outros dados sim.

 

quando não determino o charset todos os dados são salvos corretamente, porem quando vou exibilos eles não estão vindo corretamente,

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Reinternado o fato de eu não entender esse maldito problema. Fiz isso porem nada certo. o mesmo problema continua, como falei todos os caracteres além da senha estão indo normalmente.

 

 

Amigo, experimente assim:

 

  • Defina a codificação em seu HTML da forma padrão
    <meta charset="UTF-8">

 

  • Nas tabelas do seu banco de dados e nos campos defina a codificação como "utf-8-unicode-ci".

 

  • Agora quando for acessar o banco de dados, seja para obter os dados ou para gravar dados no banco, use este código:
$conexao = mysqli_connect('servidor', 'usuario', 'senha', 'banco_de_dados');
// Altera codificação de resultados para UTF-8
mysqli_query($conexao, "SET NAMES 'utf8'");
mysqli_query($conexao, 'SET character_set_connection=utf8');
mysqli_query($conexao, 'SET character_set_client=utf8');
mysqli_query($conexao, 'SET character_set_results=utf8');

Isso deve resolver seu problema :)

 

Postei duas vezes porque não consegui Editar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como não encontrei Solução Clara e que resolveria meu Problema Optei Pro fazer uma Gambiarra (ao menos eu acho que é), Segue a solução:

No módulo de conexão fiz o seguinte,

if($this->login_action == false){
	 		$this->option = array(
	 			PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8',
	 			PDO::MYSQL_ATTR_INIT_COMMAND => 'SET character_set_connection=utf8', 			
	 			PDO::MYSQL_ATTR_INIT_COMMAND => 'SET character_set_client=utf8',
	 			PDO::MYSQL_ATTR_INIT_COMMAND => 'SET character_set_results=utf8',
	 		); 			
 		}

// cortando um pedaço do código ....


//Iniciando a Conexão com om Banco de Dados;
 		try {
 			$this->pdo = new PDO("{$this->type}:host={$this->host};dbname={$this->db}", $this->user, $this->pass, $this->option); 			
 		} catch (PDOException $e) {
 			echo "<pre>".$e->getMessage()."</pre>"; 			
 		}
 		return $this->pdo;

E assim toda vez que for realizar um Login eu utilizo da seguinte lógica.

$query = new Connect();
		$query->login_action = true;		
		$buscaUsuario = $query->open()->prepare("SELECT * FROM per_perfil WHERE (login_key =:login or email =:login)");
		

Para futuros Fins deixo minha solução aqui, Adendo não sou Expert E PHP OO nem na utilização do PDO.

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gambiarra não é, já que teu banco é mysql, mas da pra simplificar!

$this->options = array(
    PDO::ATTR_PERSISTENT => true,
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8; SET CHARACTER SET UTF8; SET character_set_connection=UTF8; SET character_set_client=UTF8;',
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);

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.