如何获取<span>和</span之间的所有内容>包括标签和文本


How to get everything between <span> & </span> including tags and text

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

有没有办法在标签之间获取内容?喜欢这个-

<span class="st"> EVERYTHING IN HERE INCLUDING TAGS<B></B><EM></EM><DIV></DIV>&+++ TEXT </span>
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 

我希望这是有帮助的。

试试这个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);