PHP parse HTML tags
Possible Duplicate:
How to parse and process HTML with PHP?
我对PHP很陌生。我有一个字符串变量中某个页面的body标记的文本。我想知道它是否包含一些标签…如果给定了标记名tag1,则只从字符串中获取该标记。我怎样才能在PHP中简单地做到这一点?
谢谢!!
- 有几种方法可以解决这个问题,它们都取决于你到底想做什么。是否需要分析HTML?使用HTML分析器。是否要删除标记,并且已知语法在某些限制内?使用strip_tags()。是否要在任意HTML中黑名单某些标记?也许最好考虑一下白名单允许的标签?使用类似HTML净化器的库。
- @特洛伊,如果我的安wser帮助,请接受它,以便其他人可以从中学习。如果没有,我该怎么帮你?
你会看到这样的东西:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <?php
$content ="";
$doc = new DOMDocument ();
$doc->load("example.html");
$items = $doc->getElementsByTagName('tag1');
if(count($items) > 0) //Only if tag1 items are found
{
foreach ($items as $tag1)
{
// Do something with $tag1->nodeValue and save your modifications
$content .= $tag1->nodeValue;
}
}
else
{
$content = $doc->saveHTML();
}
echo $content;
?> |
domdocument表示整个HTML或XML文档;用作文档树的根。因此,您将拥有一个有效的标记,并且通过按标记名查找元素,您将找不到注释。
另一种可能性是regex。
1 2 3 4
| $matches = null;
$returnValue = preg_match_all('#<li.*?>(.*?)
</li>
#', 'abc', $matches); |
$matches[0][x]包含整个匹配项,如
list entry
、$matches[1][x]只包含内部HTML,如list entry。
快速方式:
查找tag1的索引位置,然后查找/tag1的索引位置。然后在这两个索引之间剪切字符串。在php.net上查找strpos和substr另外,如果字符串太长,这可能不起作用。
1 2 3
| $pos1 = strpos($bigString, '<tag1>');
$pos2 = strpos($bigString, '</tag1>');
$resultingString = substr($bigString, -$pos1, $pos2); |
您可能需要添加和/或从$pos1和$pos2中减去一些单位,以使$resultingstring正确。(如果你没有关于tag1的评论,请叹息)
正确的方法:
查找HTML分析器
- 如何查找标签的位置?记住这是有效的html:…
- $pos1=strpos($bigstring,’);不重要,您将其视为字符串。
- 哎呀,你刚才在里面发现了"",也就是说,不是真正的标签…:)
- 很有趣!然后,我将获取所有注释,生成一个唯一的字符串,将其放回而不是注释中,并将它们放回$resultingstring中。哎呀,我刚找到解决办法:)
- 或者你也可以,你知道,使用一个合适的HTML解析器。P
- 嘿,在我的回答中我确实提到了"正确的方法"
- 够公平的。只是想知道为什么你也提到了错误的方式。;)
- 因为,它存在。它就像一个红宝石立方体,你可以一直,你知道,把它拆开,组装它已经解决了。如果这是你的初衷。
- 嗨,谢谢大家。我有一个没有整个HTML的字符串,只是从中提取的body标记,它由`$html=file_get_html($link);foreach($html->find($body))作为$element`。现在,我想取一个名为tag1的内部标记(它可能具有属性),但前提是它存在。否则,我要和以前一样的身体标签。
- $html=file_get_html($link);$content="",foreach($html->find($body')as$element)$content.=$element->text();
- 很高兴这有帮助