我正在使用下面的PHP代码访问外部HTML文件,一旦访问,就会有一个foreach循环搜索HTML以查找存在于其他两个字符串之间的特定字符串。
当两个搜索字符串($ start_limiter和$ end_limiter)位于HTML文件的同一行时,此搜索工作正常。但是,当它们分开时,它不起作用。
我需要能够在两个搜索字符串之间获取字符串,而不管它们在哪一行。
<?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
}
}
答案 0 :(得分:1)
在这种情况下,分析整个字符串而不是处理部分数据(逐行)会更好。
只需使用file_get_contents()
,而不是file()
(逐行读入数组),将整个页面读入单个字符串并删除当时多余的foreach循环。
答案 1 :(得分:0)
您可以使用file()
file_get_content()
功能
file_get_contents - 将整个文件读入字符串
文件 - 将整个文件读入数组
<?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));