PHP解析HTML标记

PHP解析HTML标记,php,html,parsing,tags,Php,Html,Parsing,Tags,可能重复: 我对PHP相当陌生。 我有一个字符串变量中某个页面的body标记的文本。 我想知道它是否包含一些标签。。。其中给出了标记名tag1,如果是,则仅从字符串中获取该标记。 我如何简单地用PHP实现这一点 谢谢 快速方式: 查找tag1的索引位置,然后查找/tag1的索引位置。然后在这两个索引之间剪切字符串。在php.net上查找strpo和substr 如果字符串太长,这也可能不起作用 $pos1 = strpos($bigString, '<tag1>'); $pos2

可能重复:

我对PHP相当陌生。 我有一个字符串变量中某个页面的body标记的文本。 我想知道它是否包含一些标签。。。其中给出了标记名tag1,如果是,则仅从字符串中获取该标记。 我如何简单地用PHP实现这一点

谢谢

快速方式:

查找tag1的索引位置,然后查找/tag1的索引位置。然后在这两个索引之间剪切字符串。在php.net上查找strpo和substr 如果字符串太长,这也可能不起作用

$pos1 = strpos($bigString, '<tag1>');
$pos2 = strpos($bigString, '</tag1>');
$resultingString = substr($bigString, -$pos1, $pos2);
$pos1=strpos($bigString,”);
$pos2=strpos($bigString',);
$resultingString=substr($bigString,-$pos1,$pos2);
您可能需要在$pos1和$pos2中添加和/或减去一些单位,以获得正确的$resultingString。 (如果没有标记为1的注释,请叹息)

正确的方法:


查找html解析器

您将看到如下内容:

<?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;
?>


表示整个HTML或XML文档;用作文档树的根。因此,您将拥有一个有效的标记,通过按标记名查找元素,您将找不到注释。

另一种可能是regex

$matches = null;
$returnValue = preg_match_all('#<li.*?>(.*?)</li>#', 'abc', $matches);
$matches=null;
$returnValue=preg#u match_all(“#(.*)”#“,“abc”,$matches);

$matches[0][x]
包含整个匹配项,如
  • 列表项
  • $matches[1][x]
    仅包含内部HTML,如
    列表项

    有几种方法可以实现这一点,它们都取决于您到底想做什么。您需要解析HTML吗?使用HTML解析器。是否要剥离标记,并且已知语法在某些限制范围内?使用
    带标签()。是否要将任意HTML中的某些标记列入黑名单?也许最好考虑将允许的标记列入白名单?使用类似HTML净化器的库。@特洛伊,如果我的anwser帮助,请接受它,以便其他人可以从中学习。如果没有,我如何进一步帮助您?您如何查找标签的位置?请记住,这是有效的HTML:
    ..$pos1=strpos($bigString,');没关系,你把它当作一个字符串。哎呀,你只是在
    里面找到了“”,也就是说,不是真正的标签…:)或者你也可以,你知道,只需要使用一个合适的HTML解析器足够了。只是想知道为什么你也提到了错误的方式