PHP去除HTML中的img标签,返回HTML和图像数组

3
我需要编写一个函数,它接受一些HTML,删除其中的img标签并返回不包含图片的HTML。但是,我还需要保留这些图片(以数组形式),以便单独将它们输出到页面中。
由于我基本上不了解PHP,因此最好的方法是什么?
2个回答

6
你需要熟悉DOMDocument类。最好的方法是使用DOMDocument解析HTML,并使用getElementsByTagName('img')查找所有<img>标签。如果你想要的是图片的src属性,DOMDocument可以返回并存储在一个数组中。
// HTML already parsed into $dom
$imgs = $dom->getElementsByTagName('img');
$img_src = array();

// Array of nodes to remove.
$to_remove = array();

foreach ($imgs as $img) {
  // Store the img src
  $img_src[] = $img->getAttribute('src');

  // Delete the node (I think this works)
  $to_remove[] = $img;
}

// Then remove all the nodes slated for deletion:
foreach ($to_remove as $node) {
  $dom->removeChild($img);
}

这是非常有趣的东西,我已经收藏起来以备将来阅读。我正在处理的HTML是由一个函数返回的,不确定它是否适用于那个? - hamishtaplin
@dr_tchock 如果您的函数返回一个字符串,那么DOMDocument::loadHTML()可以从字符串中加载HTML,而不是从文件中加载。http://www.php.net/manual/en/domdocument.loadhtml.php - Michael Berkowski
当你在循环中遍历一个数组时,不应该从该数组中移除任何项。 - lovesh
@lovesh 不是这样。我用正确的方法编辑了这篇旧的帖子,将它们存储到一个单独的数组中进行删除。 - Michael Berkowski

0
<?php
$pattern = '/<img[^>]*src="([^"]*)[^>]*>/i';
preg_match_all($pattern, $data, $matches);

// image src array
$images = $matches[1];

// no images
$html = preg_replace($pattern, '', $data);
?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接