Ir para conteúdo

POWERED BY:

Arquivado

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

ZFS

[Resolvido] DomDocument

Recommended Posts

Olá a todos, estou com uma dúvida com domdocument há alguns dias e não encontro a solução, se alguém já passou por algo parecido ou sabe como resolver aceito opiniões.

 

 

Estou usando domdocument para ler um arquivo html local, já instanciei a classe utilizando iso-8859-1, utf-8 e sem nenhum parâmetro. Pego as informações entre tds. Porém quando pego o nome das cidades e printo na tela aparece o seguinte caracter junto Â, se coloco pra exibir o código fonte da pagina o caracter especial vira espaço. Já tentei remover utilizando trim, str_replace só que não consigo remover.

 

obs.: No documento html original possui espaços depois do nome da cidade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

não entendi ao certo sua duvida..

 

pra remove espaço você usa o trim()..

 

echo trim('Espaço   ');

// nao sei como você ta fazendo pra pega os nodes com DOM mais pode pass ao trim nos value dentro do loop.
foreach($nodes as $node){
echo trim($node->nodeValue);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tetarei ser mais claro, vou postar meu código e vou explicando

 

//função que utilizo para retirar o lixo
function limpaConteudo($conteudo) {

  return trim(preg_replace("/\t/", "", preg_replace("/\n/", "", preg_replace("/\r/", "", preg_replace("/<[^>]*>/", "", $conteudo)))));

}

 

 

 

//aqui é onde leio o arquivo e pego as informações que desejo entre as tds 
 $domSource = new DOMDocument("1.0", "UTF-8");// aqui já tentei utilizando utf-8, iso-8859-1 e deixando vazio

   @$domSource->loadHTMLFile($newname);//lendo a pagina html que se encontra na minha maquina

   $elements = $domSource->getElementsByTagName('td');//pegando os elementos entre as tds

   $primeiro = 'ValorISS';// iniciar a pegar os dados a partir da tag que contem essa string
   $ultimo = 'TOTAL DE NOTAS';// parar quando cehgar na tag td que contem essa string

   $isPrimeiro = false;

   foreach ($elements as $element) {

       if( substr_count($element->nodeValue,$ultimo)==1 && $isPrimeiro == true){
           break;
        }

       if($isPrimeiro)
           $resultado[] = limpaConteudo($element->nodeValue);

       if(strcmp($primeiro,$element->nodeValue)===0)
           $isPrimeiro = true;        


   }

 

Qual é o real problema... Quando dou um print_r($resultado); no navegador o nome das cidades que é um dos dados que eu estou pegando ele vem assim GOIANIA Â, e esse  não contem no html original... quando clico pra exibir o código fonte esse  é interpretado como espaços... Já tentei dar trim, rtrim, str_replace tanto pelos espaços como pelo caracter Â... E no arquivo html original que eu estou pegando as informções quando clico pra exibir o código fonte depois do nome da cidade contêm  

 

Meu objetivo: é tratar algumas inoformações do html fazer algumas consultas no banco e gerar um txt pra um software interpreta esse txt.

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom, estranho ne kk.. tira esse limpaConteudo() .. você ta pegando um texto puro.. num precisa limpa nd..

 

A pagina q da a saida em html, ela ta em UTF-8 certo?

num sei muito de DOM nao mais da uma olhada na documentacao sobre loadHtml..

 

tenta assim e ve oque acontece..

  
if($isPrimeiro)
           $resultado[] = utf8_encode( trim($element->nodeValue) );

var_dump($resultado);

Compartilhar este post


Link para o post
Compartilhar em outros sites

a estrutura do meus arquivos é a seguinte. arquivo.php e upload.php

 

arquivo.php => formulario simples com o upload de arquivo

 

upload.php => grava o arquivo html, lê com domdocument e gera o txt, e pelas tags de cabeçalho forço o download do arquivo txt.

 

Como estou usando o netbeans por padrão é utf-8

 

lembrando que na hora que instancio a classe utilizo utf-8

 

usando utf8_decode();

//printando a a variavel na tela com o var_dump
29 => string 'GOIANIA               ' (length=22)
//exibindo o código fonte
29 <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'GOIANIA              �'</font> <i>(length=22)</i>

 

usando utf8_encode();

//printando a a variavel na tela com o var_dump
  29 => string 'GOIANIA               ' (length=25)

//exibindo o código fonte
  29 <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'GOIANIA              Â '</font> <i>(length=25)</i>

 

// e esse é o fonte do html original 
<TD ALIGN='LEFT' NOWRAP STYLE='FONT-FAMILY:ARIAL;FONT-SIZE:9'> GOIANIA               </TD>

 

*e mesmo tentando trim, str_replace, "Â" ou " " não funciona.

 

Obs.: O problema é com codificação agora é continuar fazendo os testes pra tentar resolver, se tiver mais alguma dica ou outra pessoa tiver outra dica =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agradeço a ajuda de todos, como estava na correria para entregar o serviço achei uma solução não muito boa.

 

Solução: identifiquei que o caracter invalido sempre ocupava as três ultimas posições então usei substr($string,0,-3); resolveu meu problema =)

 

agradeço a ajuda de vocês ;)

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.