2015-04-08 75 views
1

我在查找两个字符串之间的字符串时遇到了很多麻烦。获取两个字符串之间的子串PHP - 读取HTML

这是代码我现在有

<? 
 

 
$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; 
 
    
 
    \t //print_r($text); 
 
\t echo($text); 
 
\t 
 
\t 
 
} 
 

 

 
function get_string_between($string, $start, $end){ 
 
\t $string = " ".$string; 
 
\t $ini = strpos($string,$start); 
 
\t if ($ini == 0) return ""; 
 
\t $ini += strlen($start); 
 
\t $len = strpos($string,$end,$ini) - $ini; 
 
\t return substr($string,$ini,$len); 
 
} 
 

 
$fullstring = $text; 
 
$parsed = get_string_between($fullstring, "tag1", "tag2"); 
 

 
print_r($parsed); 
 

 
echo ($parsed); 
 

 
?>

我认为这个问题会发生在这条线:

$fullstring = $text; 

我不能完全肯定,如果$文本有从上面的函数中剥离了HTML。当我运行这段代码时,我得到了像我期望的剥离网页,但是我设置的标签之间没有任何内容。

有没有人知道为什么这可能会发生或我失踪?

+0

什么是你想怎么办? –

+0

我想返回两个“标签”之间的字符串。 – user3205214

+3

虽然我们可以帮助您解决原始问题,但您的代码会提出问题:最终目标是什么?有很多更好的工具可用于解析HTML,具体取决于你想要做什么。 –

回答

0

我认为它是因为你正在将文本声明为循环内的局部变量。所以,当你将$ text分配给fullstring时它实际上是null。我不明白你正在尝试做的,但做到这一点,看看它是否

$fullstring = "" 
foreach ($tags as $tag){ 
    #your code as usual 
    echo($text); 
    $fullstring = $fullstring.$text; 
} 

并删除$fullstring = $text线。

+0

谢谢你解决我的问题!我会upvote你的答案但我没有足够的信誉ñ。我应该如何修改我的问题,如果我能够编辑它,这将帮助更多的人寻找这个简单的问题? – user3205214

+0

您可以通过勾选'正确'标记将我的答案标记为正确答案。 –

+0

,您可以将标题编辑为“for循环后指定字符串时获取空字符串”。顺便说一下,它的主观性很强,所以想想你是如何在谷歌中搜索这个问题的,并且制作了一个这样的标题。 –

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) 

Reference

相关问题