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

problemas difíceis de solucionar


Guest marciarf33

Pergunta

Guest marciarf33

Olá

Estou com dois problemas a meu ver insolúvei, porém confio muito nas várias cabeças brilhantes desse fórum.

Alguém pode dizer: lá vem de novo com essa história de problemas com acentuação, porém, depois de ler tudo possível, não consigo resolver meu problema. Já troquei headers de utf8 pra iso-8859', mas nada resolveu. Meu caso tem uma especificidade, meu banco de dados é preenchido por um arquivo xml que é interpretado por um parser. No arquivo xml tenho dados com com caracteres especiais como, por exemplo, caminhão, aço, m2. Quando isso é gravado nas tabelas do meu bd aparecem tudo errado, como ão, ço e ², respectivamente. No gerenciador do MySQL, aparece que o conjunto de caracteres MySQL: UTF-8 Unicode (utf8) e o Collation de conexão do MySQL é utf8-unicode_ci. Não sei como alterar essas características mas também não sei se as alterando, resolveria o problema. Nos arquivos php coloquei no header("Content-Type: text/html; charset=ISO-8859-1",true) e mais esses mysql_query("SET NAMES iso-8859-1") e mysql_query("SET CHARACTER_SET iso-8859-1"). Nada disso resolveu. Será que uma alma sábia poderia me ajudar a solucionar isso?

O outro problema é que estou desenvolvendo um sistema e estou ajustando a interface pra fazer tudo trabalhar como um conjunto. A questão é que tenho um dado que é chave pra tudo que faço nesse sistema, então quando o usuário loga esse dado é passado via GET para o arquivo seguinte. O problema é que nesse arquivo a interface é feita em Flash e não estou conseguindo enviar esse dado quando chamo um outro arquivo, já que não se trata de um form onde eu poderia faze-lo usando input type="hidden". Existe também alguém que saiba isso?

Olha, se tiver eu ganharei o ano...

Márcia

Link para o comentário
Compartilhar em outros sites

14 respostass a esta questão

Posts Recomendados

  • 0

Bom, você vai usar onde está aparecendo errado, pois dados estão sendo gravados como utf8, então se você decodificar eles antes de exibir eles devem ser exibidos de forma correta...exemplo:

echo utf8_decode('o que tá vindo do banco');

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --marciarf --

O problema é que já grava em utf8 no banco com os caracteres errados.

  ESerra disse:
Bom, você vai usar onde está aparecendo errado, pois dados estão sendo gravados como utf8, então se você decodificar eles antes de exibir eles devem ser exibidos de forma correta...exemplo:

echo utf8_decode('o que tá vindo do banco');

Link para o comentário
Compartilhar em outros sites

  • 0
Guest marcia33

ESerra

Estou ressuscintando esse post porque não consegui resolver meu problema ainda.

Estou agora fazendo o teste com o arquivo php antes de gravar no bd, através de echos. Vejo que o problema não é no bd, já que já aparece errado no browser antes de ser gravado lá.

Estou usando mysql_query("SET NAMES UTF-8") e mysql_query("SET CHARACTER_SET UTF-8"), porém usando iso-8859-1 dá na mesma, colocando, como sua sugestão, utf8_decode nas variáveis. o que tem acontecido é que tem desmembrado a variável, ou seja, Padrão, Aço CA-25 e Aço CA-50, que são valores da vaiável $nome, aparecem no browser como:

nome.Padr
nome.ão
nome.A
nome.ço CA-25
nome.A
nome.ço Ca-50

Veja que aparece perfeitamente acentuadas porém desmembradas. você sabe o porque?

  ESerra disse:
Por isso eu disse pra usar utf8_decode, essa função pega os caracteres errados e "decodifica", ou antes de gravar você usa htmlentities

Link para o comentário
Compartilhar em outros sites

  • 0
Guest marcia33

bom, como preciso realmente descobrir como resolver isso, a cada nova descoberta vou postando pra ver se alguém conhece a solução.

vou colocar o techo do código e o que ele gera:

//função que traz os dados do xml
        function dados($parser, $dados) {
        
            global $grupo;
            global $nomeprojeto;
            global $empresa;
            global $autor;
            global $data_ini;
            global $data_fim;
            global $tag;
            global $numero;
            global $nome;
            global $duracao;
            global $unidrecurso;
            global $numetarefa;
            global $numerecurso;
            global $inicioatribuicao;
            global $fimatribuicao;
            global $quanttotal;
            global $quanttotal_r;

            global $dentro_de_timephased;

            switch($tag){

                case "TITLE":
                     $nomeprojeto=$dados;
                     //$nomeprojeto=utf8_encode($nomeprojeto);
                     echo $nomeprojeto."<br>";
                break;

                case "COMPANY":
                     $empresa=$dados;
                     //$empresa=utf8_encode($empresa);
                     echo $empresa."<br>";
                break;

                case "AUTHOR":
                     $autor=$dados;
                     //$autor=utf8_encode($autor);
                     //echo $autor."<br>";
                break;

                case "STARTDATE":
                     $data_compi=explode("T",$dados);
                     //$data_ini=strtotime($data_compi['0']);
                break;
                
                case "FINISHDATE":
                     $data_compf=explode("T",$dados);
                     //$data_fim=strtotime($data_compf['0']);
                break;

                case "UID":
                     $numero=$dados;
                break;

                case "NAME":
                     $nome=$dados;
                     $nome=utf8_decode($nome);
                     echo "nome=".$nome."<br>";
                break;

                case "DURATION":
                    $valor=substr($dados,2 ,-1);
                    $replace1=array("H","M");
                    $duracao=str_replace($replace1, ":", $valor);
                break;
                
                case "GROUP";
                    $grupo=$dados;
                    //$grupo=utf8_encode($grupo);
                    //echo $grupo."<br>";
               break;
                
                case "MATERIALLABEL":
                    $unidrecurso=$dados;
               break;

               case "RESOURCEUID":
                    $numerecurso=$dados;
               break;

               case "TASKUID":
                    $numetarefa=$dados;
               break;

               case "FINISH":
                    if($dentro_de_timephased == "true") break;
                    $fimatribuicao=$dados;
               break;

               case "START":
                    if($dentro_de_timephased == "true") break;
                    $inicioatribuicao=$dados;
               break;

               case "WORK":
                    $valor1=substr($dados,2 ,-1);
                    $replace=array("H","M");
                    $quanttotal_r=str_replace($replace, ":", $valor1);
                    $quanttotal=transform($quanttotal_r);
               break;

               }//fim switch
de todos esses cases, o problema principal pode ser constato em name, que em geral é onde tem os nomes dos materiais que tem acento. o echo que esta'no codigo gera como saida:
nomeprojetoGERAL
nome=CRONOGRAMAGERAL.xml
GERAL
RJN
nome=Padr
nome=ão
nome=A
nome=ço CA-25
nome=A
nome=ço Ca-50
nome=Ajudante de Carpinteiro
nome=Ajudante de Encanador
nome=Ajudante de Ferreiro
nome=Ajudante de Telhadista
nome=Areia Fina
nome=Areia Grossa
nome=Areia M
nome=édia
nome=Arruela furo 9mm
nome=Azulejos 15xa5cm
nome=Betoneira
nome=Brita 1
nome=Brita 2
nome=Cabos
nome=Cal hidratada
nome=Caminh
nome=ão basculante
nome=Carpinteiro
nome=Chapa madeira comp 12mm
nome=Cimento
nome=Cimento Branco
nome=Cimento Colante
nome=Cola
nome=Comprador
nome=Conex
nome=ão p/ eletroduto
nome=conex
nome=ão p/ eletroduto 1/2"
nome=Dobradi
nome=ça
percebam que onde tem algum tipo de acento a variável nome aparece dobrada ou fragmentada com uma parte até o caracter acentuado e outra com a parte posterior. Alguém teria alguma explicação? resolvendo isso, acabou meu problema já que as palavras estão com a acentuaçaão correta.
  marcia33 disse:
ESerra Estou ressuscintando esse post porque não consegui resolver meu problema ainda. Estou agora fazendo o teste com o arquivo php antes de gravar no bd, através de echos. Vejo que o problema não é no bd, já que já aparece errado no browser antes de ser gravado lá. Estou usando mysql_query("SET NAMES UTF-8") e mysql_query("SET CHARACTER_SET UTF-8"), porém usando iso-8859-1 dá na mesma, colocando, como sua sugestão, utf8_decode nas variáveis. o que tem acontecido é que tem desmembrado a variável, ou seja, Padrão, Aço CA-25 e Aço CA-50, que são valores da vaiável $nome, aparecem no browser como:
nome.Padr
nome.ão
nome.A
nome.ço CA-25
nome.A
nome.ço Ca-50

Veja que aparece perfeitamente acentuadas porém desmembradas. você sabe o porque?

  ESerra disse:
Por isso eu disse pra usar utf8_decode, essa função pega os caracteres errados e "decodifica", ou antes de gravar você usa htmlentities

Link para o comentário
Compartilhar em outros sites

  • 0
Guest marcia33

a segunda opção, ou seja:

xml_parser_create()

como devo fazer?

  JCMPJ disse:
Como você está criando o obj parser?

Assim:

xml_parser_create("ISO-8859-1") ??

ou

assim:

xml_parser_create() ??

Link para o comentário
Compartilhar em outros sites

  • 0

Tente usar assim: xml_parser_create("ISO-8859-1")

E tire qualquer coisa "esquisita" que esteja na página. Não deixe nem mesmo as tags meta do HTML. Teste primeiro imprimindo direto no browser . Prováveis problemas com o banco de dados deixe para uma outra etapa.

Link para o comentário
Compartilhar em outros sites

  • 0
Guest marcia33

Fiz isso que você sugeriu..

funciona e a palavra fica grafada corretamente, porém, como já tinha citado, a variável aparece fragmentada, ou seja

nome=Padr
nome=ão
nome=PROJETO ABC
nome=ENGENHARIA
nome=Projetos Civis
nome=Projeto de Funda
nome=ções
nome=Projeto de Superestrutura
nome=Projeto de Arquitetura
nome=Projetos de Instala
nome=ções
nome=Projeto de Instala
nome=ção Hidráulica
nome=Projeto de Instala
nome=ção Elétrica

por exemplo, a primeira era pra ser nome=Padrão e aparece nome=Padr e nome-ão, dai se mando gravar no banco de dados só grava a segunda parte, ou ão. isto está sendo o problema.

só pra constar no meu browser está configurado pra exibir em codificacao ISO.

quero agora saber porque acontece isso com a variável..

  JCMPJ disse:
Tente usar assim: xml_parser_create("ISO-8859-1")

E tire qualquer coisa "esquisita" que esteja na página. Não deixe nem mesmo as tags meta do HTML. Teste primeiro imprimindo direto no browser . Prováveis problemas com o banco de dados deixe para uma outra etapa.

Link para o comentário
Compartilhar em outros sites

  • 0

Então o problema está em outra parte do código. Provavelmente onde esta fazendo o parse. Você está se matando no lugar errado.

Note que a string já vem cortada. Da pra saber pois imprime sempre nome=

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

  • 0

Olha o que achei:

  Citar
...The xml_set_character_data_handler function falls prey to the weird splitting caused by special characters (i.e. new lines whenever an umlaut is found) - my fix just uses concatenation to stop this from happening. This is a great function otherwise.

Pode ser a resposta ao seu problema.

Visite: br2.php.net

Link para o comentário
Compartilhar em outros sites

  • 0
Guest marcia33

Bom Parece mesmo que o problema é no parser. Legal que tenha me indicado o caminho, mas infelizmente, li muito mas não achei a solução. Li sobre concatenar, mas no meu caso ele junta outras coisas indesejáveis, então tambem não funciona.

Ai ai será que não vou conseguir resolver isso?

  JCMPJ disse:
Olha o que achei:
  Citar
...The xml_set_character_data_handler function falls prey to the weird splitting caused by special characters (i.e. new lines whenever an umlaut is found) - my fix just uses concatenation to stop this from happening. This is a great function otherwise.

Pode ser a resposta ao seu problema.

Visite: br2.php.net

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.

×
×
  • Criar Novo...