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

Pegar conteudo dentro de <body>


vini_loock

Pergunta

Iai galera, como vai?!

Estou com um problema aqui, que de inicio pensei que fosse na expressão regular, mas ai fiz um teste com valores diferentes e foi normal.

O que eu quero fazer?

Pegar o código fonte de uma página, e atravéz de um preg_match() tudo o que está detro de <body> e </body>.

Qual o problema?

é um pouco estranho, eu peguei o html de uma página com file_get_contents() e exibi na página, ai funcionou, mas ai eu preciso tirar o head, o que me interessa é o conteudo, então usei uma expressão simples(@<body>(.*?)<\/body>@), mas nada feito, não exibiu nada. Então ao invés de usar o html retornado pela file_get_contents() usei criei uma string: <html><body>das</body></html>.

Usei a mesma expressão e me retornou: <body>das</body>, exatamente como o planejado.

Mas de jeito nenhum consigo fazer funcionar com o html vindo de file_get_contents()

<?php
    
    $pagina[0]['url'] = 'http://localhost/busca/siteTeste/index.html';
    $pagina[0]['html'] = file_get_contents($pagina[0]['url']);
    
    echo '<h1>HTML ORIGINAL DA PÁGINA: http://localhost/siteTeste/index.html</h1>'.htmlentities($pagina[0]['html']);
    /*
        Inprime normalmente o html da página: http://localhost/siteTeste/index.html
    */
    
    $html = '<html><head><title></title></head><body>gfsdgdfg<b>fdsfsd</b>dfg</body></html>';
    preg_match("/<body>(.*)<\/body>/", $html, $p);
    echo '<hr /><h1>Conteudo entre <body>e</body> de $html</h1>'.htmlentities($p[0]);
    /*
        Imprime: <body>gfsdgdfg<b>fdsfsd</b>dfg</body>
    */
    
    preg_match("/<body>(.*?)<\/body>/", $pagina[0]['html'], $p);
    echo '<hr /><h1>Conteudo entre <body>e</body> da página(http://localhost/siteTeste/index.html)</h1>'.htmlentities($p[0]);
    /*
        Não imprime nada
    */
    
?>

Ai nesse cód tem os 3 modos que cite acima.

É isso.

Vlw.

Vinicius

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

O teu primeiro teste funciona porque não tem quebras de linhas (\n) nele.

Já o código HTML trazido do sítio deve ter, e a expressão regular não funciona, porque aí a função preg_match por padrão não trata todas as linhas de uma vez.

Tua expressão deve ter o modificador s no final (e o i também, para não fazer distinção de minúsculas <body> e maiúsculas <BODY>): '/<body>(.*)<\/body>/si'

Editado por Ensjo (Emerson Costa)
Link para o comentário
Compartilhar em outros sites

  • 0

Putz, não acredito que passei a noite toda tentando resolver isso e não pensei nisso, mas são coisas como estas que nos fazer aprender a pensar.

No fim das contas meu código ficou assim:

<?php
    
    $pagina[0]['url'] = 'http://localhost/busca/siteTeste/index.html';
    $pagina[0]['html'] = file_get_contents($pagina[0]['url']);
    
    $html = str_replace(array("\n", "\s", "\t"), array('', '', ''), $pagina[0]['html']);
    
    preg_match("/<body(.*)?>(.*?)<\/body>/", $html, $p);
    echo '<hr /><h1>Conteudo entre <body>e</body> da página(http://localhost/siteTeste/index.html)</h1>'.htmlentities($p[0]);

?>

Vlw.

Até a prox.

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