如何获得<span>&amp;之间的所有内容</span>包括标签和文字

时间:2012-05-05 07:03:41

标签: php

我尝试使用preg_match_all来获取给定html标记之间的所有内容,但它会产生一个空结果,而且我不擅长php。

有没有办法在标签之间获取内容?像这样 -

<span class="st"> EVERYTHING IN HERE INCLUDING TAGS<B></B><EM></EM><DIV></DIV>&+++ TEXT </span>

2 个答案:

答案 0 :(得分:1)

preg_match在HTML解析方面不是很擅长,特别是在你的情况下,这有点复杂。

相反,您使用HTML解析器并获取您正在寻找的元素。以下是选择第一个span元素的简单示例。通过查找类属性可以更加区分,例如,只是为了给出一些开始的指针:

$html = '<span class="st"> EVERYTHING IN HERE INCLUDING TAGS<B></B><EM></EM><DIV></DIV>&+++ TEXT </span>';
$doc = new DOMDocument();
$doc->loadHTML($html);
$span = $doc->getElementsByTagName('span')->item(0);
echo $doc->saveHTML($span);

输出:

<span class="st"> EVERYTHING IN HERE INCLUDING TAGS<b></b><em></em><div></div>&amp;+++ TEXT </span>

如果你仔细观察,你会发现即使是HTML错误也已经被&+++动态修复,而这些错误是无效的HTML。

如果您只需要内部HTML,则需要迭代span元素的子元素:

foreach($span->childNodes as $child)
{
    echo $doc->saveHTML($child);
}

哪个给你:

 EVERYTHING IN HERE INCLUDING TAGS<b></b><em></em><div></div>&amp;+++ TEXT 

我希望这有用。

答案 1 :(得分:-2)

使用preg_match

尝试此操作
$str = "<span class=\"st\"> EVERYTHING IN HERE INCLUDING TAGS<B></B><EM></EM><DIV></DIV>&+++ TEXT </span>";
preg_match("/<span class=\"st\">([.*?]+)<\/span>/i", $str, $matches);
print_r($matches);