使用简单 HTML DOM 解析器来 return 所有元素*除了*图像

Use Simple HTML DOM Parser to return all elements *except* images

我正在尝试使用 Simple HTML DOM Parser 查看我的 WordPress post 的内容并将所有图像移动到 post 的末尾,无论它们在哪里在实际 html.

我已经使用以下方法成功隔离了所有图像:

$html = str_get_html(wpautop(get_the_content()));
foreach($html->find('img') as $element) echo $element->src . '<br>';

根据文档。 (这只是根据网站上给出的示例打印图像源,因为我还在试验)。

但是,我无法弄清楚如何找到所有元素 除了 图像 - documentation 有用于查找没有属性的元素的选项,但那不是'似乎不适用。

我可以 select 多个元素,如下所示:

$ret = $html->find('a, p'); 

...但是我要么不得不猜测要使用哪些标签,要么包括每个不是 img 的标签,这将是一个庞大且不可靠的列表。有什么解决办法吗?

因为我想把图片和内容的主体分开,最简单的就是把它们放到一个数组中,然后从DOM中删除它们,然后再返回它(as suggested here ), 像这样:

$html = str_get_html(wpautop(get_the_content()));

$images = array();

foreach($html->find('img') as $element) :
    $images[] = $element->src; // Puts the image source into an array
    $element->outertext = ''; // and then removes it from the DOM.
endforeach;

echo $html;

print_r($images);

这只是 returns post 的内容,没有图像,然后显示图像数组,然后我可以 运行 一个 foreach 来显示。

使用 PHP 的 DOM classes,您可以:

$doc = new \DOMDocument();
@$doc->loadHTML(get_the_content());

$xpath = new \DOMXPath($doc);

foreach ($xpath->query('//*[name() != "img"]') as $node) {
    // do stuff here
}