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.

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?

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.
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?

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?

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..

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:

...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?

Olha o que achei:
...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.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...