ZFS 0 Denunciar post Postado Março 10, 2012 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
Luis Paullo 47 Denunciar post Postado Março 10, 2012 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
ZFS 0 Denunciar post Postado Março 10, 2012 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
Luis Paullo 47 Denunciar post Postado Março 10, 2012 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
ZFS 0 Denunciar post Postado Março 10, 2012 To na faculdade agora na hora que chega em casa testo e falo se deu certo... Vlw pelas dicas. Compartilhar este post Link para o post Compartilhar em outros sites
ZFS 0 Denunciar post Postado Março 10, 2012 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
Kakashi_Hatake 267 Denunciar post Postado Março 10, 2012 Cara, posta o arquivo que você está tentando extrair os dados. Talvez tenha uma forma melhor de trabalhar. Compartilhar este post Link para o post Compartilhar em outros sites
ZFS 0 Denunciar post Postado Março 12, 2012 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