如何解决php DOMDocument使用DOCTYPE声明添加<html>标头
|| 我正在通过DOMDocument类向每个链接添加#b哈希。 $dom = new DOMDocument();
$dom->loadHTML($output);
$a_tags = $dom->getElementsByTagName(\'a\');
foreach($a_tags as $a)
{
$value = $a->getAttribute(\'href\');
$a->setAttribute(\'href\',$value . \'#b\');
}
return $dom->saveHTML();
效果很好,但是返回的输出包含一个“ 1”声明以及一个“ 2”和“ 3”标签。知道为什么会发生这种情况或如何防止这种情况发生吗?
解决方法
那就是
DOMDocument::saveHTML()
通常所做的,是的:生成带有Doctype声明,<head>
标记的完整HTML文档,...
两种可能的解决方案:
如果您使用的是PHP> = 5.3,则saveHTML()
会接受一个可能对您有所帮助的附加参数
有关更多信息,请参见PHP 5.3.6中的DOM Goodie。
如果需要使用PHP <5.3.6的代码,则必须使用str_replace()
或regex或任何您认为可以使用的等效项,以删除不需要的HTML代码部分。
有关示例,请参见手册的用户说明中的该说明。
,真正的问题是DOM的加载方式。使用此代替:
$html->loadHTML($content,LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
请在此处注明原始答案。
,添加ѭ9将不起作用,并且将返回错误,因为它期望一个节点而不是布尔值。
我使用的解决方案:
return preg_replace(\'/^<!DOCTYPE.+?>/\',\'\',str_replace( array(\'<html>\',\'</html>\',\'<body>\',\'</body>\'),array(\'\',\'\'),$doc->saveHTML()));
我正在使用PHP> 5.4
,我通过创建新的DOMDocument并将子节点从原始节点复制到新节点来解决此问题。
function removeDocType($oldDom) {
$node = $oldDom->documentElement->firstChild
$dom = new DOMDocument();
foreach ($node->childNodes as $child) {
$dom->appendChild($doc->importNode($child,true));
}
return $dom->saveHTML();
}
如此使用
return $dom->saveHTML();
我用:
return removeDocType($dom);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。