如何防止PHP DomDocument“修复”您的HTML字符串
我一直试图通过使用
HTML DomObject来解析网页,以便将它们用于应用程序以扫描它们的SEO质量.
但是我遇到了问题.出于测试目的,我写了一个包含以下不正确的html的小html页面: <head> <meta name="description" content="randomdesciption"> </head> <title>sometitle</title> 你可以看到标题在head标签之外,这是我试图检测的错误. 现在出现了问题,当我使用curl从此页面捕获响应字符串然后将其发送到dom文档以将其加载为HTML它通过在标题周围添加另一个标签来实际修复此问题. <head> <meta name="description" content="randomdesciption"> </head> <head><title>sometitle</title></head> 我已经检查了卷曲响应数据并且实际上不是问题,在执行loadHTML()方法时,php DomDocument以某种方式修复了html语法. 我还尝试通过将它们设置为false来关闭DomDocument recover,substituteEntities和validateOnParse属性,但没有成功. 我一直在搜索谷歌,但到目前为止我找不到任何答案.我想对某些人来说实际上希望破解的HTML不被修复是很少见的. 有谁知道如何防止DomDocument修复我破碎的HTML? 提前致谢
更新:从PHP 5.4开始,您可以使用
HTML_PARSE_NO_IMPLIED
$dom->loadHTML($html,LIBXML_HTML_NOIMPLIED); 原答案如下 你不能.在理论上there is a flag 在旁注中,这种特殊行为似乎取决于所使用的LIBXML_VERSION. 运行此代码段: <?php $html = <<< HTML <head> <meta name="description" content="randomdesciption"> </head> <title>sometitle</title> HTML; $dom = new DOMDocument; $dom->loadHTML($html); $dom->formatOutput = true; echo $dom->saveHTML(),LIBXML_VERSION; 在我的机器上会给 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <html> <head><meta name="description" content="randomdesciption"></head> <title>sometitle</title> </html> 20707 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |