PHP解析HTML代码

48

可能是重复问题:
解析HTML的最佳方法

如果PHP变量中包含类似以下内容的HTML代码,我该如何解析它:

<h1>T1</h1>Lorem ipsum.<h1>T2</h1>The quick red fox...<h1>T3</h1>... jumps over the lazy brown FROG!

我希望只获取在标题之间的文本,我知道使用正则表达式并不是一个好主意。


4
@everyone 现在已经关闭了重复的帖子,但是这个帖子与之不同。因为原始帖主不是想要文本“T1、T2、T3”,而是想要在一个标题结束和下一个标题开始之间的文本内容,例如“Lorem ipsum.”。因此,这篇帖子是不同的,请看一下。 - shamittomar
1个回答

113

使用 PHP 文档对象模型

<?php
   $str = '<h1>T1</h1>Lorem ipsum.<h1>T2</h1>The quick red fox...<h1>T3</h1>... jumps over the lazy brown FROG';
   $DOM = new DOMDocument;
   $DOM->loadHTML($str);

   //get all H1
   $items = $DOM->getElementsByTagName('h1');

   //display all H1 text
   for ($i = 0; $i < $items->length; $i++)
        echo $items->item($i)->nodeValue . "<br/>";
?>
这会输出为:
 T1
 T2
 T3

[编辑]: 根据提问者的澄清:

如果你想要像 Lorem ipsum. 这样的内容,你可以直接使用这个正则表达式:

<?php
   $str = '<h1>T1</h1>Lorem ipsum.<h1>T2</h1>The quick red fox...<h1>T3</h1>... jumps over the lazy brown FROG';
   echo preg_replace("#<h1.*?>.*?</h1>#", "", $str);
?>

这个输出结果为:

Lorem ipsum.The quick red fox...... 跳过那只懒惰的棕色青蛙


谢谢,但我需要获取<h1></h1>之间的文本,例如:"Lorem ipsum.","The quick red fox..."等。因此不是H1标签之间的文本,而是在结束</h1>标签和开始<h1>标签之间的文本。 - Francisc
更接近了,谢谢。我会尽力更清楚:我想获取标题之间的文本,计算其长度,并决定是否要隐藏部分内容。虽然你的回答非常有帮助。但我想做的是保留所有文本,只需添加一些HTML来隐藏部分内容。 - Francisc
这是一个很好的提示@shamittomar!谢谢你!有一个建议,也许使用foreach而不是for循环会更加简洁,但这确实帮了我很大的忙。 - cbloss793

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接