我有一篇文章,其中包含文字和多个图片,需要分别获取图片和文字。
现在我有了这段代码,它只返回文章中的最后一张图片:
preg_match('/<img.+src=[\'"](?P<src>.+?)[\'"].*>/i', $article, $img);
如何选择所有图像并反向获取文本?
谢谢
答案 0 :(得分:1)
$text = preg_replace('/<img.+src=[\'"](?P<src>.+?)[\'"].*>/i', '', $article);
preg_match_all('/<img.+src=[\'"](?P<src>.+?)[\'"].*>/i', $article, $images);
//use $images and $text
答案 1 :(得分:1)
您可以使用DOM:
$imgSrc = array();
$txt = '';
$dom = new DOMDocument();
@$dom->loadHTML($article);
$imgs = $dom->getElementsByTagName('img');
foreach ($imgs as $img) {
$imgSrc[] = $img->getAttribute('src');
}
$xpath = new DOMXPath($dom);
$textNodes = $xpath->query('//*[not(self::script) and not(self::style)]/text()');
foreach ($textNodes as $textNode) {
$tmp = trim($textNode->textContent);
$txt .= (empty($tmp)) ? '' : $tmp . PHP_EOL;
}
XPath查询详情:
//
表示DOM树中的任何位置
*
表示所有标记节点
[.....]
定义条件
not(self::script)
:当前节点不能是脚本节点
text()
返回文本节点