Ir para conteúdo

POWERED BY:

Arquivado

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

Carlos Pedro

[Resolvido] Função substr cortando em lugar errado (urgente)

Recommended Posts

Bom dia a todos , agradeço a ajuda , tenho um problema estou recebendo um site externo via CURL , ate ai tudo bem , o problema é que recebo em uma string que preciso formatar e ao usar o SUBSTR para formatar ele esta recortando o texto muito depois da posição correta, segue o codigo que estou usando :

 

 class replace {
    private $html;
    private $header;
    private $body;
    
    function __construct($html) {
        $this->html = $html;
    }
    
    function TagIniNum() {
        $stringIni = addslashes('<head>');
        $Ini = strpos($this->html, $stringIni);
        return $Ini;
        
    }
    
    function TagFimNum(){
        $stringFim = addslashes('</head>');
        $Fim = strpos($this->html, $stringFim); // o corte esta ficando em lugar errado CORRIGIR
        return $Fim;
    }
    
    function Corte() {
        $TxtCort = mb_substr($this->html, $this->TagIniNum(), $this->TagFimNum());
        echo $TxtCort;
    }

}

e este é parte do conteudo da variavel $html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1; cache" />
        <title>Consulta D&eacute;bitos de Ve&iacute;culo</title>
        <link href="/site/js/jQuery/css/estilo.css" rel="stylesheet" type="text/css" />
        <link href="/site/js/jQuery/css/ui-lightness/jquery-ui-1.10.3.min.css" rel="stylesheet" type="text/css">
            <script type="text/JavaScript" src="/site/js/jQuery/jquery-1.10.2.min.js"></script>
            <script type="text/JavaScript" src="/site/js/jQuery/js/jquery-ui-1.10.3.min.js"></script>
            <script type="text/JavaScript" src="./js/simpleCaptcha.js?ver=1.8"></script>
            <script type="text/JavaScript" src="/site/js/captcha.js?ver=1.8"></script>
            
    </head>
  <body>
        <form name="form" action="./consulta.php" method="post">
        <div id="dialog" title=""></div>

Como quero recortar os texto contido entre as tag's header do html ele executa o recorte muitos caracteres apos a tag de fechamento, já tentei trabalhar diretamente com a variavel transformada com htmlentities e/ou usando o MB_SUBSTR e o resultado é o mesmo o corte sempre acontece muito apos a tag de final que é </header>.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, na questão em específico, o problema esta relacionado as quebras de linhas e espaçamentos.
Segue uma sugestão:
 

  class HTMLRecort 
  {
    private $html;
    private $header;
    private $body;
    
    public function __construct($html) 
    {
        $this->html = $html;
    }
    
    public function getHead() 
    {
        $html = preg_replace("/\r?\n/","", $this->html);
        preg_match('/<head>(.*)<\/head>/', $html, $matches);
        return $matches[0];
    }
 }
          
 $head = new HTMLRecort($html);
 echo $head->getHead();

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 horas atrás, EdCesar disse:

Olha, na questão em específico, o problema esta relacionado as quebras de linhas e espaçamentos.
Segue uma sugestão:
 


  class HTMLRecort 
  {
    private $html;
    private $header;
    private $body;
    
    function __construct($html) {
        $this->html = $html;
    }
    
    function getHead() 
    {
        $html = preg_replace("/\r?\n/","", $this->html);
        preg_match('/<head>(.*)<\/head>/', $html, $matches);
        return $matches[0];
    }
 }
          
 $head = new HTMLRecort($html);
 echo $head->getHead();

 

Obrigado EdCesar , vou fazer aqui ! , deu certo inicializei a variavel $matches e blz ficou tudo em linha e o corte ficou certo, obrigado !

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você tivesse aberto o link teria visto q é possível efetuar um CURL (inclusive passando parametros de POST/GET/HEADER/COOKIE.

 

 

Exemplo:

<?php


// Open connection
$ch = curl_init();

// Set the url, number of POST vars, POST data
curl_setopt( $ch, CURLOPT_URL, 'https://meusite.com.br' );

$headers = array( 
	'Authorization: key=' . 'MY_TOKEN',
	'Content-Type: application/json'
);

curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt( $ch, CURLOPT_POST, true );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );

//Posts Field
$fields = array(
	'site'  => 'imasters.com.br'
);

//PAYLOAD
curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode( $fields ) );

// Avoids problem with https certificate
curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false);

// Execute post
$result = curl_exec($ch);

// Close connection
curl_close($ch);


// Create DOM from string
$html = str_get_html($result);

$html->find('div', 1)->class = 'bar';

$html->find('div[id=hello]', 0)->innertext = 'foo';

echo $html; // Output: <div id="hello">foo</div><div id="world" class="bar">World</div>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 horas atrás, gabrieldarezzo disse:

Se você tivesse aberto o link teria visto q é possível efetuar um CURL (inclusive passando parametros de POST/GET/HEADER/COOKIE.

 

 

Exemplo:


<?php


// Open connection
$ch = curl_init();

// Set the url, number of POST vars, POST data
curl_setopt( $ch, CURLOPT_URL, 'https://meusite.com.br' );

$headers = array( 
	'Authorization: key=' . 'MY_TOKEN',
	'Content-Type: application/json'
);

curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt( $ch, CURLOPT_POST, true );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );

//Posts Field
$fields = array(
	'site'  => 'imasters.com.br'
);

//PAYLOAD
curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode( $fields ) );

// Avoids problem with https certificate
curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false);

// Execute post
$result = curl_exec($ch);

// Close connection
curl_close($ch);


// Create DOM from string
$html = str_get_html($result);

$html->find('div', 1)->class = 'bar';

$html->find('div[id=hello]', 0)->innertext = 'foo';

echo $html; // Output: <div id="hello">foo</div><div id="world" class="bar">World</div>

 

Eu vi sim mais só depois de te agradecer pela ajuda, mais uma vez obrigado a todos, como marcar este tópico como resolvido ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por José Roberto Redígolo
      Prezados,
      Sou iniciante em PHP e tenho uma dúvida que não consegui sanar na internet. Tenho um programa externo que me dá o seguinte retorno:
      decoding from Base64:  QNVqRQGAAQAyKVlWDC2Za5A6
      Decoded packet
      --------------
      Message Type = Data
                  PHYPayload = 40D56A4501800100322959560C2D996B903A
                ( PHYPayload = MHDR[1] | MACPayload[..] | MIC[4] )
                        MHDR = 40
                  MACPayload = D56A4501800100322959560C2D
                         MIC = 996B903A (OK)
                ( MACPayload = FHDR | FPort | FRMPayload )
                        FHDR = D56A4501800100
                       FPort = 32
                  FRMPayload = 2959560C2D
                   Plaintext = 48656C6C6F ('Hello')
                      ( FHDR = DevAddr[4] | FCtrl[1] | FCnt[2] | FOpts[0..15] )
                     DevAddr = 01456AD5 (Big Endian)
                       FCtrl = 80
                        FCnt = 0001 (Big Endian)
                       FOpts =
                Message Type = Unconfirmed Data Up
                   Direction = up
                        FCnt = 1
                   FCtrl.ACK = false
                   FCtrl.ADR = true
             FCtrl.ADRACKReq = false
       
      Preciso colocar o valor de Plaintext e o valor de DevAddr em uma variável. Preciso apenas dos valores em hexadecimal. Alguém tem algum exemplo de como fazer isso?
      Desde já agradeço.
      Zé Roberto
    • Por anderh
      Tenho uma variável com uma string assim:
      "Qualquer texto de qualquer tamanho.Palavras65.00002020-05-26" e/ou "Qualquer texto de qualquer tamanho.Qualquercoisa127.00002020-05-26"
      Preciso pegar deles o "65.0000" e o "127.0000", respectivamente, com a dica de que esses substr são números, não sei se ajuda.
      Alguém já resolveu algo assim? Pesquisei substr mas não tive sucesso.
      Agradeço!
    • Por Luccas Gaulia
      Ola Pessoal,
       
      Queria fazer o seguinte, uma variável que possa dividir em duas partes:
      $var1 = "pro_dados" (Antes), não sei qual função
      $var2 = "id=2" (Depois), essa já fiz com substr
      $link = "pro_dados?id=2"; $page = AQUI!!!!, preciso de uma função que deixe apenas "pro_dados"; $page_list = substr(strrchr($page, "?"), 0); $filename = $page . '.php' . $page_list; include $filaname;  
    • Por empirerock
      Boa tarde.
      Tenho um texto dentro de um campo do tipo texto no banco mysql.
      Gostaria de caputrar a data que está na terceira linha, usando um script php que está mais abaixo, porém este código meu não dá certo, pois o nome pode ser diferente, sendo assim mudando o tamanho da string.
      Eu queria saber como capturar a string da terceira linha.
       
      Como mostrado abaixo:
       
       
       
      Script que estou utilizando:
       
       
    • Por jecastro
      Pessoal,
      Estou tentando realizar a inserção de um espaço em branco dentro de uma String, mas não consigo, já tentei com Decode, com case, sempre dá algum erro.

      A regra seria a seguinte, tem uma matricula que pode receber numeros e letras. Só que as 4 primeiras teriam que ser separadas, não necessariamente precisando ter 4, mas nestes casos teria esse espaço em branco, em casos que existam as 4, pode continuar normal. Apos esses 4, começa, por padrão com um CD472343492843, sempre.

      Exemplo: EUSACD9484304934
                        EUA  CD9843274329

      Mas não consigo, já tentei pegar a SUBSTR e inserir. O código que eu fiz, seria mais ou menos assim:
       
      DECODE(SUBSTR(MATR.MATRICULAS_ID, 1,5) LIKE 'CD%',
      SUBSTR(MATR.MATRICULAS_ID, 1, 5) ||' '|| SUBSTR(MATR.MATRICULAS_ID, 6, LENGTH(MATR.MATRICULAS_ID)))

      Alguém tem uma forma de fazer isso com case, com o decode, aceito qualquer um. rs. Obrigada!
       
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.