我需要编写一个函数,它接受一些HTML,删除其中的img标签并返回不包含图片的HTML。但是,我还需要保留这些图片(以数组形式),以便单独将它们输出到页面中。
由于我基本上不了解PHP,因此最好的方法是什么?
由于我基本上不了解PHP,因此最好的方法是什么?
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);
}
<?php
$pattern = '/<img[^>]*src="([^"]*)[^>]*>/i';
preg_match_all($pattern, $data, $matches);
// image src array
$images = $matches[1];
// no images
$html = preg_replace($pattern, '', $data);
?>
DOMDocument::loadHTML()
可以从字符串中加载HTML,而不是从文件中加载。http://www.php.net/manual/en/domdocument.loadhtml.php - Michael Berkowski