Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Problemas Com O Bom Do Utf-8


Carlos Rocha

Pergunta

Ola Pessoal, estou criando esse tópico novo pois um anterior que estava discutindo já perdeui seu objetivo (que aliás já até foi resolvido).

Pessoal.

Vamos por partes. Talves assim, haja quem possa me ajudar.

1) Fiz o site todo

2) Publiquei

3) Apareceram erros de acentos (acentos vem como quadradinhos.....)

4) Observei a criptografia do banco Mysql. Era utf-8 collate unicode_ci

5) Alterei a conexão com o MySql (no php mysql_connect() para utf-8 tambem com o codigo abaixo e coloquei o cabeçalho (header) do php e do html.

No arquivo de conexãoficou assim:

<?php
    /* Conectando e escolhendo o banco de dados   */
//Variaveis de conexao
 $host = "xxxx";    // qual o servidor 
 $db = "xxxx";        // qual a base 
 $user = "xxxx";        // qual o username 
 $pass = "xxxx";        // qual a senha
    
/*
//SERVIDOR
 $user = "nature";        
 $pass = "lavie";
*/
   $link = mysql_connect($host,$user,$pass)or die("Não pude conectar: " . mysql_error());
  mysql_select_db($db) or die("Não pude selecionar o banco de dados");
  
mysql_set_charset("utf8", $link);

?>
E, Nos cabeçalhos:
<? 
header('Content-Type: text/html; charset=utf-8');
include ("global/funcoes_php/var.php");
include ("global/funcoes_php/conecta.php"); 
include ("TMySQL.php");
include ("TCarrinho.php");
session_start(); //start aqui por causa do carrinho em cima. Se colocar start na primeira linha, dfa erro de serialize, se colocar aqui mesmo, da erro de session.
?>...
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
....

Isso resolveu o problema dos caracters acentudados que vinham do banco por resposta a querys.

Acontece que os arquivos que não vinham dos banco (textos livres html, variaveis php) continuavam vindo com acento em caracters.

O que eu fiz

6) Abri todos os arquivos no bloco de notas e os converti de ANSI para UTF-8;

O problema é que nem todos os arquivos aceitaram a conversão. Eles, depois de convertidos, voltam a ANSI.

Mesmo assim isso resolveu os problemas com, acentos mas trouxeram outro problema: Classes e sessões não estavam funcionando pois junto com o utf-8, veio o BOM, que lance (invisivelmente ou traduz o ?> do php para caracters e isso fazia com que o session_start() não fosse a primeira coisa a aparecer no site dai dava erro de session e as classes passarm a ter comportamento irregular. O que eu fiz?

7) Peguei o Notepad ++ e fui retirando o BOM de todos os arquivos mas muitos deles deles não convertem para sem BOM.

Nota:

Coloquei o start no cabeçalho abaixo da chamada para a classe de carrinho por causa do carrinho em cima. Se colocar start na primeira linha, da erro de serialize, se colocar o serialize(), não da em nada.

Agora, esta tudo funcionando direitinho, mas, por causa da posição que tive que colocar o start(), na pagina do carrinho esta dando aviso de erro de cabneçalho embora esteja funcionando tudo bem.

Por favor, podem testra o script em www.naturelavie.com.br/novo.

O novo no fim do site é por que é site mesmo. Cadastre um usuario fictisio (qualquer endereo de smail passa) (qualquer cpf passa) faz uma compra e verifica que todas as paginas estao sem erro. Apenas a pagina do carriho e a carrinho final estão dando erro de cabeçalho. mas funciona.

Me parece que o problema tem a ver com classe e utf sem BOM

Quem puder ajudar agradeço.

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Seguinte::

O problema era que eu tinha duas funções de conexão funcionando juntas.

Uma com uma classe e outra normal.

Agora é o seguinte:

A classe, tem uma função query

<? 
class TMySQL { 

 var $soquete;

function connect($host,$db,$user,$pass) { 
   $this->host = "xxxxx"; 
   $this->db  = "xxxx";
   $this->user = "xxxxx";
   $this->pass = "xxxxx"; 
   $this->soquete=mysql_connect($this->host,$this->user,$this->pass);
   mysql_set_charset("utf8", $this->soquete);
   if (!$this->soquete) { 
     echo "Não foi possível conectar-se ao Bando de Dados MySQL"; 
   }
   else
   {
   if (!mysql_select_db($this->db,$this->soquete)) { 
     echo "Banco de dados não encontrado"; 
   } 
   }
 }

 function query ($string) { 
   $myquery = mysql_query($string,$this->soquete); 
   if (!$myquery) { 
      echo "Erro na consulta da query!<br>" . $string;
   } 
   else
   { 
      return $myquery;
   }
 }
}
?>
Minhha duvida é a seguinte:> Se eu fizer a chamada da função assim:
$var= $MySql->query("");

Como eu faria para ter o mysql_num_rowa dessa query

Editado por Carlos Rocha
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...