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

Problema com acentos


Carlos Rocha

Pergunta

Ola pessoal.

Estou com um problema que esta me tirando o sono!

seguinte:

Tenho a pagina abaixo que chama outras.

Acontece que, quando coloco esse script dentro da pagina cadastro_conteudo.php ai ele da erro de script.

<? 
header('Content-Type: text/html; charset=utf-8');
include ("global/funcoes_php/var.php");
include ("global/funcoes_php/conecta.php"); 
session_start(); 
?>
<html>
<head>
<title><?php echo $title; ?></title>
    <? include ("global/funcoes_php/campos_meta.php")?>
    <link href="global/stilo.css" rel="stylesheet" type="text/css"> 
    <script language="JavaScript" src="global/validacoes_java_script/valida_cadastro.js"></script>
    <script language="JavaScript" src="global/funcoes_java_script/mascara.js"></script>
    <script language="JavaScript" src="global/funcoes_java_script/abre_fecha.js"></script>        
 </head>
<body>
<table bgcolor="#008B43" width="1000" border="0" cellspacing="0" cellpadding="0" align="center">
  <tr>
    <td align="center" ><? include("global/topo.php");   ?></td>
  </tr>
  <tr>
    <td valign="top"   ><? include("cadastro_conteudo.php");?></td>
  </tr>
  <tr>
    <td align="center" ><? include("global/base.php");   ?></td>
  </tr>
</table>
</body>
</html>
Desse jeito rerorna assim:
S�o Francisco
S�o Francisco e voc�
Mas quando, no lugar do include para a pagina cadastro_conteudo.php, rodo um script que tenho, ele roda normal. assim:
<? 
header('Content-Type: text/html; charset=utf-8');
include ("global/funcoes_php/var.php");
include ("global/funcoes_php/conecta.php"); 
session_start(); 
?>
<html>
<head>
<title><?php echo $title; ?></title>
    <? include ("global/funcoes_php/campos_meta.php")?>
    <link href="global/stilo.css" rel="stylesheet" type="text/css"> 
    <script language="JavaScript" src="global/validacoes_java_script/valida_cadastro.js"></script>
    <script language="JavaScript" src="global/funcoes_java_script/mascara.js"></script>
    <script language="JavaScript" src="global/funcoes_java_script/abre_fecha.js"></script>        
 </head>
<body>
<table bgcolor="#008B43" width="1000" border="0" cellspacing="0" cellpadding="0" align="center">
  <tr>
    <td align="center" ><? include("global/topo.php");   ?></td>
  </tr>
  <tr>
    <td valign="top"   >
<?php
$bairro="São Francisco";
$ip = getenv("REMOTE_ADDR"); 
print $bairro;
print "<br>";
print "São Francisco e você";
print "<br>";
?>
     </td>
  </tr>
  <tr>
    <td align="center" ><? include("global/base.php");   ?></td>
  </tr>
</table>
</body>
</html>
Mas desse jeito rerorna assim:
São Francisco
São Francisco e você

Isso não esta tendo lógica mas esta acontecendo.

Grato a quem puder ajudar.

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

21 respostass a esta questão

Posts Recomendados

  • 0

Mas hein Sergio, essa parte eu já havia entendido.

Uso:

DW CS4 (SALVA UTF8)

APACHE 2.2.14

PHP 5.3.1

MYSQL 6

O PROBLEMA SÓ DA QUANDO O CÓDIGO, TEXTO, ETC.. ESTIVER NUMA PAGINA CHAMADA POR INCLUDE.

SE, EXECUTAR O MESMO SCRIPT NA PAGINA CHAMADORA, O SCRIPT RODA COM OS ACENTOS CERTINHO.

O QUE FAZER NESSE CASO

Link para o comentário
Compartilhar em outros sites

  • 0

Todos os arquivos forma feitos a patir do Dreweaver, e como você pode ver no codigo acima, o arquivo incuido só tem isso:

<?php
$bairro="São Francisco";
$ip = getenv("REMOTE_ADDR"); 
print $bairro;
print "<br>";
print "São Francisco e você";
print "<br>";
?>

Ou seja, para teste só exibição de variaveis php normal.

Esta me parecendo um problema de cofiguração do php.ini nos includes

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

  • 0

Nunca duvide da capacidade de bugar de um programa, sério.

Eu só usava DW, tive que usar o Netbeans uma vez porque não tinha nada que desse jeito num problema com acentuação.

Eu to dando uma dica, se você quiser ficar quebrando a cabeça e resolver sozinho, boa sorte.

estou só apontando uma solução. Sim, o Netbeans resolveu todos os meus problemas com acentuação.

Link para o comentário
Compartilhar em outros sites

  • 0

Sabe irmão.

Pense comigo.

Eu uso o dreamweavber. Já estou acostumado com ele.; Conheço o NetBeans pois trocar a IDE é o meso que trocar de noiva.

Eu não sou um exime programado aind. Por isso, estou te pedindo ajuda.

Mas, vejo o problema vindo do include.;

Deve ter uma configurasção no php.ini para isso.

Os dadsos que vem do banco,. chegam normal pois a conexão com, o MySql esta codificada utf-8

o html tambem esta

e o php

Mas, só os textos veem assim

Link para o comentário
Compartilhar em outros sites

  • 0

Resolvi o problema dos acentos abrindo todos os arquivos no bloco de notas e usando o "salvar como" trocando Ansi por utt-8.

Agora, SOMENTE NO SERVIDOR WEN POIS AQUI NO LOCALHOST NÃO DA O ERRO, esta acontecendo erro de cabeçalho e seession.

Quando abro as páginas, da o seguinte erro:

Warning: Cannot modify header information - headers already sent by (output started at /home/nature/public_html/novo/index.php:1) in /home/nature/public_html/novo/index.php on line 2

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/nature/public_html/novo/index.php:1) in /home/nature/public_html/novo/index.php on line 5

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/nature/public_html/novo/index.php:1) in /home/nature/public_html/novo/index.php on line 5

Na linha 5 do index.php tem:
...
session_start();
...


como resolver isso?

Detalhe:

Esse erro só da quando rodo a pagina no seridor web. Localmente (localhost) não dá esse erro.

Acompanhe:

http://naturelavie.com.br/novo/

Link para o comentário
Compartilhar em outros sites

  • 0

Abre os arquivos e tira o B.O.M. deles, você não vai conseguir modificar isso no host (a menos que o servidor seja dedicado), a diferença está no controle de buffer, os pacotes que a gente instala vem com uma diretiva (não me lembro qual) ativada, que seria o mesmo que usar o ob_strart(), logo, localmente não aparece, mas no host isso é desativado por motivos óbvios, ai o problema aparece.

Link para o comentário
Compartilhar em outros sites

  • 0

1 - Como eu disse anteriormete: "nesse caso você vai precisar abrir os arquivos em algum editor que mostre isso (como o phpdesigner) e remover isso manualmente";

2 - Entre em contato com o suporte e pergunte como você pode manipular as diretivas do PHP, isso varia de acordo com o SO e painel usado.

Link para o comentário
Compartilhar em outros sites

  • 0

Converti para UTF-8 (sem DOM) usando o Notepad ++ e esta funcionado.

Porem agora apresentou outro erro:

Fatal error: main() [<a href='function.main'>function.main</a>]: The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition &quot;TCarrinho&quot; of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in /home/nature/public_html/novo/carrinho_conteudo.php on line 26
Isso quando chamo a classe de carriho de compras abaixo:
<?php
/*
    Classe TCarrinho
*/
class TCarrinho {
var $item_codigo = array();
var $item_quantidade = array();
    
    /*
        ObtemPosicao
        Este metodo obtem a posicao de um item mediante ao seu codigo, retornando um valor booleano e gravando a posicao na variavel de referencia $posicao, caso o codigo do item esteja no carrinho.
    */
    function ObtemPosicao($codigo,&$posicao){
        //Percorrendo o vetor
        for($i=0;$i<count($this->item_codigo);$i++) {
            if ($this->item_codigo[$i] == $codigo) {
                $posicao = $i;
                return TRUE;
           }
         }

    }/* ObtemPosicao() */
    
    /*
        ObtemPosicao
        Este metodo obtem o preço por unidade do produto tendo em mãos o codigo dele.
    */
        function ObtemPreco($codigo){
        $Sql = mysql_query("select preço from produtos where id = $codigo");
        list($preco_uni) = mysql_fetch_row($Sql);
        return $preco_uni;
        //return mysql_result($sql,0,0);
         }/* ObtemPreco() *
        
    
    /*
        AdicinarItem
        Este metodo adiciona um item no carrinho
    */
    function AdicionarItem($codigo,$quantidade) 
    {
        //Inicializando parametro
        $posicao = -1; 
        $achou = $this->ObtemPosicao($codigo,$posicao);
        if (!$achou){
            $this->item_codigo[] = $codigo;
            $this->item_quantidade[] = $quantidade;
        }
    } /* AdicionarItem() */

    /*
        RemoverItem
        Este metodo remove um item do carrinho de compra, passando o codigo do produto
    */
    function RemoverItem($codigo) 
    {
        //Inicializando parametro
        $posicao = -1; 
        $achou = $this->ObtemPosicao($codigo,$posicao);
        if ($achou){
            //Removendo o elemento do vetor
            array_splice($this->item_codigo, $posicao, 1);
            array_splice($this->item_quantidade, $posicao, 1);        
        }
            
    } /* RemoveItem() */

    /*
        QuantosItens
        Este metodo retorna a quantidade de itens incluidas no carrinho de compras
    */
    function QuantosItens() {
        return count($this->item_quantidade);
    } /* QuantosItens() */

    /*
        ExcluirTodosItens
        Este metodo retira todos os itens contidos no carrinho de compras
    */
    function ExcluirTodosItens(){
        $this->item_quantidade = null;
        $this->item_codigo = null;
    } /* ExcluirTodosItens() */

    /*
        QuerySQL_ObtemListaDeItens
        Este metodo gera uma parte do codigo SQL que sera usado para buscar os dados
        do carrinho de compra (id, NOME e PREÇO). O comando SQL final tera como finalidade
        de buscar no banco de dados apenas os dados dos itens incluidos no carrinho.
    */
    function QuerySQL_ObtemListaDeItens(){
        $itens = "where ";
        $STR = "";
        if ($this->QuantosItens()>0) {
            $fixo = " id =";
            for ($i=0;$i<$this->QuantosItens();$i++){
                $STR = $STR . $fixo . " " . $this->item_codigo[$i];
                if ($i+1<$this->QuantosItens()) {
                    $STR = $STR . " or ";
                }
            }
        }
        if (!$STR == "") {
            return $itens . $STR;
        }else{
            //Caso não exista nenhum item no carrinho o codigo final SQL, procurara por um item que não existe na tabela de produtos, neste caso  -1.
            return "where id = -1";
        }
    } /* QuerySQL_ObtemListaDeItens() */

    /*
        ObtemQuantidadeItem
        Este metodo obtem a quantidade de um Item
    */
    function ObtemQuantidadeItem($codigo){
        $posicao = -1;
        $achou = $this->ObtemPosicao($codigo,$posicao);
        if ($achou) {
            return $this->item_quantidade[$posicao];
        }else{
            return "erro ao obter quantidade do item";
        }
        
    } /* ObtemQuantidaItem() */

    /*
        ObtemSubTotalDeUmItem
        Este metodo retorna o subtotal de um item (QUANTIDADE * VALOR UNITARIO)
    */
    function ObtemSubTotalDeUmItem($id,$preço){
        $posicao = -1;
        $achou = $this->ObtemPosicao($id,$posicao);
        if ($achou) {
            return ($this->item_quantidade[$posicao]*$preço);
        }else{
            return "erro ao obter sub total do item";
        }
    } /* ObtemSubTotalDeUmItem() */

    /*
        AtualizarCarrinho
        Este metodo coleta todos as variaveis enviadas pelo FORMULARO (method="POST") 
        e atualiza as quantidades dos itens.
    */
    function AtualizarCarrinho(&$VAR_ENVIADAS_PELO_BROWSER){
        //Percorrendo a lista de itens e atualizando suas quantidades
        for ($i=0;$i<$this->QuantosItens();$i++){
            $this->item_quantidade[$i] = $VAR_ENVIADAS_PELO_BROWSER[$this->item_codigo[$i]];
        }
    } /* AtualizarCarrinho() */

} /* Classe TCarrinho */
?>
carrinho_conteudo.php
<?php
//Verificando se a variavel de sessão foi criada
if (!session_is_registered("MeuCarrinho")){
    session_register("MeuCarrinho");
    $MeuCarrinho = new TCarrinho();
}

$MySQL = new TMySQL();
$MySQL->connect($host, $db, $user, $pass);

if (!empty($op)){
    switch ($op) {
    case "adicionar":
        if (!empty($id_prod)){
            $Query = "select id from produtos where id = $id_prod";
            $R_Query = $MySQL->query($Query);
            if (mysql_num_rows($R_Query)>0){
                $MeuCarrinho->AdicionarItem($id_prod,1);
            }
        }
        break;
    case "excluir":
        $MeuCarrinho->RemoverItem($id_prod);
        break;
    case "atualizar":
        $MeuCarrinho->AtualizarCarrinho($_POST);
        break;
    case "finalizar":
        if ($MeuCarrinho->QuantosItens()>0) {
        echo "<script>document.location='CarrinhoFinal.php?acao=qual_cep&preco_total=$preco_total&peso_medio=$peso_medio'</script>";
        }
    break;
    }
}
if ($MeuCarrinho->QuantosItens()==0) {
       echo "<table align='center'>";
       echo "</tr><td>";       
       echo "&nbsp;<p><p><h2>Carrinho Vazio</h2><p><p>";
          echo "</tdf></tr>";       
       echo "</table>";
        }
else {
$QuerySQL = "select id, nome, preço, peso from produtos " . $MeuCarrinho->QuerySQL_ObtemListaDeItens();
$Resultado = $MySQL->query($QuerySQL);
?>

<table BORDER=0 CELLSPACING=0 CELLPADDING=0 COLS=1 WIDTH="100%" BGCOLOR="#0080C0" >
<tr>
<td>
<center><b><font color="#FFFFFF">Minha Loja - Carrinho</font></b></center>
</td>
</tr>
</table>
<form method="POST" action="carrinho.php?op=atualizar">
<table BORDER=0 CELLSPACING=2 CELLPADDING=4 COLS=5 WIDTH="100%">
<tr BGCOLOR="#004080">
<td>
<center><b><font color="#FFFF99">ITEM</font></b></center>
</td>

<td>
<center><b><font color="#FFFF99">QTD.</font></b></center>
</td>

<td>
<center><b><font color="#FFFF99">PRE&Ccedil;O UNIT&Aacute;RIO</font></b></center>
</td>

<td bgcolor="#004080">
<center><b><font color="#FFFF99">TOTAL</font></b></center>
</td>

<td BGCOLOR="#004080"></td>
</tr>


<?
$preco_total = 0.00;
$peso_medio = 0.00;
while(list($id, $nome, $preço, $peso) = mysql_fetch_row($Resultado)) {
    //Computando preço total
    $preco_total = $preco_total + $MeuCarrinho->ObtemSubTotalDeUmItem($id,$preço);
    $peso_medio = $peso_medio + $MeuCarrinho->ObtemSubTotalDeUmItem($id,$peso);

    session_register("preco_total");
    session_register("peso_medio");
    echo "
<tr>
<td><font size=-1>". $nome ."</font></td>

<td>
<center><input type=TEXT name=". $id ." size=2 value=". $MeuCarrinho->ObtemQuantidadeItem($id) ."></center>
</td>

<td>
<center><b>". number_format($preço, 2, '.', '')."</b></center>
</td>

<td>
<center><b>". number_format($MeuCarrinho->ObtemSubTotalDeUmItem($id,$preço), 2, '.', '') ."</b></center>
</td>

<td><b><font face=Tahoma><font size=-2><a href=carrinho.php?op=excluir&id_prod=". $id .">Excluir</a></font></font></b></td>
</tr>
    ";
}
?>

<tr>
<td></td>

<td><b><font color="#FF0000"></font></b>&nbsp;</td>

<td>
<div align=right><b><font color="#FF0000">TOTAL(R$)</font></b></div>
</td>

<td BGCOLOR="#FFFFD7">
<center><b><font color="#990000"><?=number_format($preco_total, 2, '.', ''); ?></font></b></center>
</td>

<td></td>
</tr>
</table>
<center><input type="submit" value="Atualizar" name="Atualizar" WIDTH="78" HEIGHT="20" style="background-color: rgb(0,111,55); color: rgb(255,255,0)"><center><br>
</form>

<TABLE>
<TR>
    <TD>
        <form method="post" action="produtos.php?acao=listar">
            <center><input type="submit" value="<< Voltar as Compras" name="Atualizar" WIDTH="78" HEIGHT="20" style="background-color: rgb(0,111,55); color: rgb(255,255,0)"><center>
        </form>
    </TD>
    <TD>
        <form method="post" action="carrinho.php?op=finalizar">
        <input type="hidden" name="preco_total" value="<?=number_format($preco_total, 2, '.', ''); ?>">
        <input type="hidden" name="peso_medio" value="<?=number_format($peso_medio, 2, '.', ''); ?>">
            <center><input type="submit" value="Finalizar Compra >>" name="Atualizar" WIDTH="78" HEIGHT="20" style="background-color: rgb(0,111,55); color: rgb(255,255,0)"><center>
        </form>    
    </TD>
</TR>
</TABLE>
<? } ?>

Esta iclusive destruindo as sessions.

O que faço agora?

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

  • 0

Ola, encontrei esse post: http://blog.pensaofunbari.com/dragao/2009/...ualquer-pagina/, que fala da nescessidade de serialização e deserialização de classes no caso de uso co sessões.

O exemplo que o cara deu funcionou mas quando jogo no meu script, a conexão com o mysql para.

Por que?

segue a classe:

<? 
class TMySQL { 
 var $host;
 var $db;
 var $user;
 var $pass;
 var $soquete;

 function connect($host,$db,$user,$pass) { 
   $this->host = $host; 
   $this->db  = $db; 
   $this->user = $user; 
   $this->pass = $pass; 
   $this->soquete=mysql_connect($this->host,$this->user,$this->pass);
   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"; 
   } 
   }
 }
//QUANDO ACRESCENTEI ESTAS LINHAS ABAIXO COMENTADAS, O ERRO COM, A CONEXÃO FOI MOSTRADO. ENQUANTO ISSO, SÓ MOSTRAVA ERRO DE QUERY.
 function query ($string) { 
   $myquery = mysql_query($string,$this->soquete); 
   if (!$myquery) { 
      echo "Erro na consulta da query!<br>" . $string;
   } 
   else
   { 
      return $myquery;
   }
 }
/*   public function __sleep()
    {
        return array($this->host, $this->user, $this->pass, $this->db);
    }
    
    public function __wakeup()
    {
        $this->connect();
    }
*/
}
?>
a conexão é essa:
<?php
    /* Conectando e escolhendo o banco de dados   */
//Variaveis de conexao
 $host = "xxx";    // qual o servidor 
 $db = "xx";        // qual a base 
 $user = "xxx";        // qual o username 
 $pass = "xxx";        // qual a senha
    

   $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 para piorar verifiquei que alguns arquivos, mesmo depois de tirar o BOM, voltam a ficar ANSI sozinhos.

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

  • 0

só uma pequena correção no incicio do arquivo carrinho_conteudo.php

Serializei a classe e agora não apresenta erro mas exibe a pagina em branco, ou seja, não mostra nada

<?php
$MySQL = new TMySQL();
$_SESSION['MySQL'] = serialize($MySQL);
$MySQL = unserialize($_SESSION['MySQL']);
$MySQL->connect($host, $db, $user, $pass);

//Verificando se a variavel de sessão foi criada
if (!session_is_registered("MeuCarrinho")){
    session_register("MeuCarrinho");
    $MeuCarrinho = new TCarrinho();
    $_SESSION['MeuCarrinho'] = serialize($MeuCarrinho);
    $MeuCarrinho = unserialize($_SESSION['MeuCarrinho']);
                                           }


............

Link para o comentário
Compartilhar em outros sites

  • 0

Pessoal.

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

1) Fiz o site todo

2) Publiquei

3) Apareceram erros de acentos

4) Observei a criptografia do banco, era utf

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

No arquivo de conexão e após a conexão.

mysql_set_charset("utf8", $link);
Nos cabeçalhos:
<? 
session_start(); 
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");
?>...
<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:

Esatava dando erro nas classes de serializaçao. dai vi num site esinando como serializar e desserializar e fiz assim mas, embora o exemplo dso cara tenha dado certo, no meu script rertorna pagina vazia.

Quem puder ajudar agradeço.

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

  • 0

Já esta praticamente tudo resolvido.

Só preciso de uma informação:

Da maioria das paginas, através de Notepad ++, conmsegui rertirar o BOM do utf8.

Algumas, que mesmo que o Notepad ++ diz ter removido o BOM, quiando vai conferir estão em ANSI.

Nestes casos, como fazer?

Deste jeito esta dando erro de classe.

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,2k
×
×
  • Criar Novo...