【问题标题】:Extract all the text and img tags from HTML in PHP. [duplicate]在 PHP 中从 HTML 中提取所有 text 和 img 标签。 [复制]
【发布时间】:2011-11-05 16:32:03
【问题描述】:

可能重复:
Best methods to parse HTML with PHP

对于一个项目,我需要获取一个 HTML 页面并从中提取其所有文本和 img 标签,并保持它们在网页中出现的相同顺序。

例如,如果网页是:

<p>Hi</p>
<a href ="test.com" alt="a link"> text link</a>
<img src="test.png" />
<a href ="test.com"><img src="test2.png" /></a>

我想用这种格式检索该信息:

text - Hi
Link1 - <a href ="test.com">text link</a>  notice without alt or other tag
Img1 - test.png  
Link2 - <a href ="test.com"><img src="test2.png" /></a>  again no tag

有没有办法在 PHP 中做到这一点?

【问题讨论】:

  • 到目前为止您尝试过什么?为了帮助您入门,请查看使用 PHP 的 HTML 解析器。
  • 查看相关链接,甚至搜索。
  • 我不会将其称为完全重复,这些问题涵盖相同的理由,但它们的要求并不完全相同。
  • 好吧,这里更不喜欢要求 codez。看起来你并没有像你宣称的那样投入很多精力。您的问题并未显示您已经尝试过的内容。

标签: php html parsing


【解决方案1】:

有没有办法在 php 中做到这一点?

是的,您可以先删除所有不感兴趣的标签,然后使用DOMDocument 删除所有不需要的属性。最后需要重新运行strip_tags来移除DomDocument添加的标签:

$allowed_tags = '<a><img>';
$allowed_attributes = array('href', 'src');

$html = strip_tags($html, $allowed_tags);
$dom = new DOMDocument();

$dom->loadHTML($html);

foreach($dom->getElementsByTagName('*') as $node)
{
    foreach($node->attributes as $attribute)
    {
        if (in_array($attribute->name, $allowed_attributes)) continue;
        $node->removeAttributeNode($attribute);
    }
}

$html = $dom->saveHTML($dom->getElementsByTagname('body')->item(0));
$html = strip_tags($html, $allowed_tags);

Demo

【讨论】:

    【解决方案2】:

    我会使用 HTML Parser 将信息从网站中提取出来。开始阅读。

    【讨论】:

      猜你喜欢
      • 2014-03-02
      • 1970-01-01
      • 2012-11-30
      • 2010-09-13
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 2015-06-10
      相关资源
      最近更新 更多