我在数据库中找到了几个类似的帖子:
<a href="somelink.html"><img src=someimage.jpg border=1 alt="some text"></a>
所以我需要:
我尝试的一件事是解析dom并获得SRC源:
$doc = new DOMDocument();
$body = $this->removeUnnecessaryTags($body);
$doc->loadHTML($this->removeUnnecessaryTags($body));
$imageTags = $doc->getElementsByTagName('img');
foreach($imageTags as $tag) {
$result[] = [ 'src' => $tag->getAttribute('src'), 'alt' => $tag->getAttribute('alt') ];
}
我知道这可以用正则表达式完成,但我的正则表达式知识不是很好。有什么想法吗?
由于
答案 0 :(得分:2)
您只需要使用DOMDocument功能和libxml选项:
$html = '<a href="somelink.html"><img src=someimage.jpg border=1 alt="some text"></a>';
libxml_use_internal_errors(true);
$dom = new DOMDocument;
$dom->loadHTML($html, LIBXML_HTML_NODEFDTD | LIBXML_HTML_NOIMPLIED);
$result = $dom->saveXML($dom->documentElement);
echo $result;
LIBXML_HTML_NODEFDTD
阻止在DTD丢失时自动添加DTD。
LIBXML_HTML_NOIMPLIED
阻止在丢失时添加html和body标记。
saveXML方法将使用符合XML的语法保存文档,因此它解决了自闭标签问题。
$dom->documentElement
用作参数以避免自动添加的xml声明。(*)
无论使用哪种方法(saveXML或saveHTML),都会使用双引号自动包含属性。
(*)这也将删除最终的DTD,因此如果要保留它,可以使用此变通方法删除xml声明:
$result = $dom->saveXML();
$result = substr($result, strpos($result, "\n") + 1);