Ir para conteúdo

POWERED BY:

Arquivado

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

Rocalbar

Quebrar linha dentro da tag pre e retornar array

Recommended Posts

Pessoal

 

Estou quebrando a cabeça aqui, vocês podem me ajudar?

 

Seguinte, tenho um script que puxa informações de outro site, o site retorna as informações dentre de um <pre>, mas não consigo individualizar, ou seja, quero quebrar as linhas.

 

Visualizando o retorno temos:

 

<pre>

O conteúdo do texto é esse.

Dei uma olhada no código fonte e não encontrei nenhuma tag de quebra de linha.

São várias linhas que eu quero tratar, mas sem individualizá-las esta difícil.

Como posso resolver este problema?

</pre>

 

Coloquei todo o conteúdo de retorno na variável $resultado.

 

O script é o seguinte:

 

$texto = explode("<br />", preg_replace('/(\\r)?\\n/i', '<br />', $resultado["texto"]));
foreach($texto as $linha)
{
if(trim($linha) != "")
{
echo "<p>" . htmlentities($linha) . "</p>\n";
}
}
Mas não consigo o retorno esperado.
Se puderem me dizer o que esta errado, por favor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por padrão, o navegador ignora quebras de linha e espaços múltiplos quando está processando o código HTML, mas se o conteúdo estiver dentro de um elemento <PRE>, ele é exibido como está, com quebras de linha e múltiplos espaços. ---tanto, ao invés de estar procurando por <br />, você deveria está procurando pelo caractere LINEFEED (\n).

 

Pelo que entendi, você quer cada linha que está em <PRE> como um elemento de um array, certo?

 

 

$content = "<pre>
O conteúdo do texto é esse.
Dei uma olhada no código fonte e não encontrei nenhuma tag de quebra de linha.
São várias linhas que eu quero tratar, mas sem individualizá-las esta difícil.
Como posso resolver este problema?
</pre>";
 
$arr = array_filter(
    preg_split("/\n/", strip_tags($content)),
    create_function('$lin', 'return strlen(trim($lin));')
  );
 
var_dump($arr);


Retorno:

 

array (size=4)
  1 => string 'O conteúdo do texto é esse.
' (length=30)
  2 => string 'Dei uma olhada no código fonte e não encontrei nenhuma tag de quebra de linha.
' (length=81)
  3 => string 'São várias linhas que eu quero tratar, mas sem individualizá-las esta difícil.
' (length=83)
  4 => string 'Como posso resolver este problema?
' (length=35)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mangakah

 

Obrigado por responder.

 

Seguinte o conteúdo do <pre>, consta na variável $resultado, conforme linha de código abaixo.

 

preg_match_all('/<pre style=\"font-size:14px\">([^`]*?)<\/pre>/', $conteudo, $resultado);

 

Modifiquei um pouco o código que você mandou, para:

 

$arr = array_filter(
preg_split("/\n/", strip_tags($resultado)), _____________ESTA É A LINHA 21
create_function('$lin', 'return strlen(trim($lin));')
);
var_dump($arr);
Mas retornou o seguinte:
Warning: strip_tags() expects parameter 1 to be string, array given in C:\xampp\htdocs\whois1\whois.php on line 21
array(0) { }
O que há de errado?
Obrigado,

Compartilhar este post


Link para o post
Compartilhar em outros sites

$resultado é um array, e uma string é esperada. Se as entradas do resultado estão nesse array, você deve então colocá-lo em um laço foreach

 

 

$arr = array();
foreach ($resultado as $content) {
    $arr[] = array_filter(
        preg_split("/\n/", strip_tags($content)),
        create_function('$lin', 'return strlen(trim($lin));')
     );
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

mangakah

 

Ainda esta com alguma pipa, rsrsrs

 

Olha o retorno:

 

Warning: strip_tags() expects parameter 1 to be string, array given in C:\xampp\htdocs\whois1\whois.php on line 23

Warning: strip_tags() expects parameter 1 to be string, array given in C:\xampp\htdocs\whois1\whois.php on line 23

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então é um array multidimensionaL?? :upset:

 

Poste o conteúdo da variável $resultado:

 

var_export($resultado);

 

Execute e poste aqui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

mangakah

 

Segue o código completo.

 

<?php
$dominio= '033.000.167/0001-01';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://registro.br/cgi-bin/whois/?qr='.$dominio.'lresp');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$conteudo = curl_exec($ch);
preg_match_all('/<pre style=\"font-size:14px\">([^`]*?)<\/pre>/', $conteudo, $resultado);
/*$content = "<pre>
O conteúdo do texto é esse.
Dei uma olhada no código fonte e não encontrei nenhuma tag de quebra de linha.
São várias linhas que eu quero tratar, mas sem individualizá-las esta difícil.
Como posso resolver este problema?
</pre>";*/
$arr = array();
foreach ($resultado as $content) {
$arr[] = array_filter(
preg_split("/\n/", strip_tags($content)),
create_function('$lin', 'return strlen(trim($lin));')
);
}
curl_close($ch);
?>
Depois de quebrar as linhas vou tratar as informações para salvar no banco de dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

<?php
$dominio= '033.000.167/0001-01';
 
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://registro.br/cgi-bin/whois/?qr='.$dominio.'lresp');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$conteudo = curl_exec($ch);
curl_close($ch);
 
preg_match('/<pre style=\"font-size:14px\">([^`]*?)<\/pre>/', $conteudo, $resultado);
 
$arr = array_filter(
    preg_split("/\n/", strip_tags($resultado[1])),
    create_function('$lin', 'return strlen(trim($lin));')
 );
 
var_dump($arr);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Kra muito bom, acho que agora foi, mas...... te tanto testar o site esta bloqueando o meu IP, vou realizar mais testes amanha. Kra muito obrigado mesmo, você ajudou muitísssimo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para fazer esses testes, é recomendável usar um proxy para esconder seu IP

 

 

$dominio= '033.000.167/0001-01';
$proxy = '200.253.158.131';
 
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://registro.br/cgi-bin/whois/?qr='.$dominio.'lresp');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, $proxy);
// curl_setopt($ch, CURLOPT_HEADER, true);
 
$conteudo = curl_exec($ch);
curl_close($ch);

 

Eu peguei esse proxy (200.253.158.131) nesse site:

http://hidemyass.com/proxy-list/search-225521

 

Lá tem outros que você pode usar...

 

 

Para usar localhost como proxy, use:

 

 

 

$proxy = '127.0.0.1:8888';

 

 

PS: Esqueça o que escrevi sobre o Tor, era besteira...

Compartilhar este post


Link para o post
Compartilhar em outros sites

rsrs blz.

 

deixei o código assim, mas ainda esta bloqueando.

 

<?php
$dominio= '033.000.167/0001-01';
$proxy = '147.31.182.137:8080';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://registro.br/cgi-bin/whois/?qr='.$dominio.'lresp');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, $proxy);
// curl_setopt($ch, CURLOPT_HEADER, true);
$conteudo = curl_exec($ch);
curl_close($ch);
preg_match('/<pre style=\"font-size:14px\">([^`]*?)<\/pre>/', $conteudo, $resultado);
$arr = array_filter(
preg_split("/\n/", strip_tags($resultado[1])),
create_function('$lin', 'return strlen(trim($lin));')
);
var_dump($arr);
?>

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.