0

I'm using the PHP code below to access an external HTML file, once accessed there is a foreach loop that searches through the HTML to find a specific string that exists between two other strings.

This search works fine when the two search strings ($start_limiter and $end_limiter) are on the same line in the HTML file. However when they are on separate lines it does not work.

I need to be able to get the string between two search strings regardless of what line they're on.

<?php

function findText($start_limiter,$end_limiter,$url)
{
   $start_pos = strpos($url,$start_limiter);
   if ($start_pos === FALSE)
   {
       return FALSE;
   }

   $end_pos = strpos($url,$end_limiter,$start_pos);

   if ($end_pos === FALSE)
   {
      return FALSE;
   }

   return substr($url, $start_pos+1, ($end_pos-1)-$start_pos);
}  


$url = file("testResults.html");

$start_limiter = "firstString";
$end_limiter = "lastString";



foreach ($url as $number => $line)
{
    $res = findText($start_limiter, $end_limiter,trim($line));



    if ($res != FALSE)
    {

        $str2 = substr($res, 9);


    echo $str2;
        ?><br /><?php

}


}
1
  • Use file_get_contents and offset parameter in strpos Commented Sep 28, 2014 at 9:12

2 Answers 2

1

In that case it would be better to analyze the whole string instead of working on partial data (line by line).

Just use file_get_contents(), instead of file() (reads line by line into an array), which reads the whole page into a single string and remove the then superfluous foreach loop.

Sign up to request clarification or add additional context in comments.

2 Comments

Thanks for your answer. Could you give me a hint or example of how the syntax might look? I've been hunting for a solution for this but haven't had any luck in figuring it out. For example, how would I iterate through the string generated by file_get_contents() in order to get the string content contained between the search tags? (firstString content I want lastString). Note that firstString and lastString will appear many times in the HTML file and I need to compile each separate result into a list... Hence the foreach loop I'm currently using.
e.g. $offset = 0; while (false !== $text = findText($startLimiter, $endLimiter, $file, $offset) { /* do something with $text */ } where $file is the return of file_get_contents and $offset a reference inside the findText() function which you always set to where the last $end_limiter ended (e.g. $offset = $end_pos + strlen($end_limiter);). Then you can use $offset as third argument on the first strpos() call.
0

Instead of file() function you can use file_get_content()

file_get_contents — Reads entire file into a string

file — Reads entire file into an array

<?php
$url = file_get_contents("testResults.html");

function findText($start_limiter,$end_limiter,$url)
{
   $start_pos = strpos($url,$start_limiter);
   if ($start_pos === FALSE)
   {
       return FALSE;
   }

   $end_pos = strpos($url,$end_limiter,$start_pos);

   if ($end_pos === FALSE)
   {
      return FALSE;
   }

   return substr($url, $start_pos+1, ($end_pos-1)-$start_pos);
}  

$start_limiter = "firstString";
$end_limiter = "lastString";
$res = findText($start_limiter, $end_limiter,trim($line));

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.