【问题标题】:PHP parse HTML tags [duplicate]PHP解析HTML标签[重复]
【发布时间】:2012-11-07 15:08:06
【问题描述】:

可能重复:
How to parse and process HTML with PHP?

我对 PHP 还是很陌生。 我在字符串变量中有某个页面的正文标记的文本。 我想知道它是否包含一些标签......其中给出了标签名称 tag1 ,如果是这样,则只从字符串中获取该标签。 我怎样才能在 PHP 中简单地做到这一点?

谢谢!!

【问题讨论】:

  • 有几种方法可以解决这个问题,它们都取决于你到底想做什么。你需要解析 HTML吗?使用 HTML 解析器。您想去除标签并且已知语法在一定范围内吗?使用strip_tags()。您想将任意 HTML 中的某些标签列入黑名单吗?也许更好地考虑 whitelisting 允许的标签?使用 HTML Purifier 之类的库。
  • @Troy 如果我的 anwser 有帮助,请接受它,以便其他人可以从中学习。如果没有,我该如何进一步帮助您?

标签: php html parsing tags


【解决方案1】:

你会看到这样的东西:

<?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 文档;作为文档树的根。因此,您将拥有一个有效的标记,并且通过按标签名称查找元素,您将找不到 cmets。

【讨论】:

    【解决方案2】:

    另一种可能性是正则表达式。

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

    $matches[0][x] 包含整个匹配项,例如 &lt;li class="small"&gt;list entry&lt;/li&gt;$matches[1][x] 仅包含内部 HTML,例如 list entry

    【讨论】:

      【解决方案3】:

      快捷方式:

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

      $pos1 = strpos($bigString, '<tag1>');
      $pos2 = strpos($bigString, '</tag1>');
      $resultingString = substr($bigString, -$pos1, $pos2);
      

      您可能需要在 $pos1 和 $pos2 中添加和/或减去一些单位才能正确地得到 $resultingString。 (如果你没有带有 tag1 的 cmets sigh

      正确的方法:

      查找 html 解析器

      【讨论】:

      • 你如何查找标签的位置?请记住,这是有效的 HTML:&lt;!-- &lt;tag&gt; --&gt;&lt;foo bar="&lt;/tag&gt;"&gt;...
      • $pos1 = strpos($bigString, '');没关系,你把它当成一个字符串。
      • 糟糕,您刚刚在&lt;!-- &lt;tag1&gt; --&gt; 中找到了“”,也就是说,它并不是真正的标签... :)
      • 或者你也可以,你知道,只使用一个合适的HTML解析器。 :P
      • 很公平。只是想知道为什么你也提到了错误的方式。 ;)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-20
      • 2011-04-07
      相关资源
      最近更新 更多