我在查找两个字符串之间的字符串时遇到了很多麻烦。
这是我目前的代码
<?
$html = file_get_contents('mywebsite');
$tags = explode('<',$html);
foreach ($tags as $tag)
{
// skip scripts
if (strpos($tag,'script') !== FALSE) continue;
// get text
$text = strip_tags('<'.$tag);
// only if text present remember
if (trim($text) != '') $texts[] = $text;
//print_r($text);
echo($text);
}
function get_string_between($string, $start, $end){
$string = " ".$string;
$ini = strpos($string,$start);
if ($ini == 0) return "";
$ini += strlen($start);
$len = strpos($string,$end,$ini) - $ini;
return substr($string,$ini,$len);
}
$fullstring = $text;
$parsed = get_string_between($fullstring, "tag1", "tag2");
print_r($parsed);
echo ($parsed);
?>
我认为问题发生在这一行:
$fullstring = $text;
我不完全确定$ text是否具有上述函数中的精简HTML。当我运行这个代码时,我得到了剥离的网页,就像我期望的那样,但我在设置的标签之间什么都没有。
有谁知道为什么会发生这种情况或我错过了什么?
答案 0 :(得分:0)
我认为是因为你在for循环中将文本声明为局部变量。所以,在你将$ text分配给fullstring之后,它实际上是空的。我不明白你要做什么,但要做到这一点,看看它是否有效
$fullstring = ""
foreach ($tags as $tag){
#your code as usual
echo($text);
$fullstring = $fullstring.$text;
}
并删除$fullstring = $text
行。
答案 1 :(得分:0)
你可以用这个:
function get_string_between($string, $start, $end){
$string = ' ' . $string;
$ini = strpos($string, $start);
if ($ini == 0) return '';
$ini += strlen($start);
$len = strpos($string, $end, $ini) - $ini;
return substr($string, $ini, $len);
}
$fullstring = 'this is my [tag]dog[/tag]';
$parsed = get_string_between($fullstring, '[tag]', '[/tag]');
echo $parsed; // (result = dog)