我已经阅读了几个涉及未申报实体的问题。 我的问题有点不同。 我正在按照这个程序,从网上刮下各种页面。 1.首先在文件上运行php tidy函数。 2.然后从中创建一个dom文档,并使用xpath获取某些节点的值。(table,para和blockquotes)
我的问题很简单:
1.Warning:DOMDocument :: loadHTML():ID hp.global.servicebox.links.arztsuche已在实体中定义,行:2112
2.XML错误:第2679行未声明的实体警告
我意识到第一个警告,可能是因为我首先通过整洁的功能,然后接下来加载HTML。
但第二个问题真的很麻烦。它只是拒绝产生任何输出,我放松了一切。
在这个网站上阅读,发现一个未申报的实体,应该事先宣布,但你会意识到,鉴于我的任务的性质,这是不可能的(我正在为上帝的缘故抓网)
我启用了
var_dump(libxml_use_internal_errors(true));
但是,除了它不会使我的终端混乱之外,它根本没有帮助。对于初学者来说,没有关于如何处理此错误或任何错误的文档。
我意识到这可能不是第一次有人遇到这个问题,我确信解决方案就在那里,我似乎无法找到它。 成千上万的人警告你不要使用正则表达式来解析html或xml,但很少有解决方案解决我们面对解析器的问题 - 就像我面对的那样。
干杯, 理查德, - 一个心怀不满的HTML解析器afficonado。
编辑: 一些额外的信息 - >这是我正在使用的整洁功能。
function cleaning($what_to_clean, $tidy_config='' )
{
$config = array
(
'show-body-only' => false,
'clean' => true,
'char-encoding' => 'utf8',
'add-xml-decl' => true,
'add-xml-space' => true,
'output-html' => false,
'output-xml' => false,
'output-xhtml' => true,
'numeric-entities' => false,
'ascii-chars' => false,
'doctype' => 'strict',
'bare' => true,
'fix-uri' => true,
'indent' => true,
'indent-spaces' => 4,
'tab-size' => 4,
'wrap-attributes' => true,
'wrap' => 0,
'indent-attributes' => true,
'join-classes' => false,
'join-styles' => false,
'enclose-block-text' => true,
'fix-bad-comments' => true,
'fix-backslash' => true,
'replace-color' => false,
'wrap-asp' => false,
'wrap-jste' => false,
'wrap-php' => false,
'write-back' => true,
'drop-proprietary-attributes' => false,
'hide-comments' => false,
'hide-endtags' => false,
'literal-attributes' => false,
'drop-empty-paras' => false,///dont drop empty paras
'enclose-text' => true,
'quote-ampersand' => true,
'quote-marks' => false,
'quote-nbsp' => true,
'vertical-space' => true,
'wrap-script-literals' => false,
'tidy-mark' => false,
'merge-divs' => false,
'repeated-attributes' => 'keep-last',
'break-before-br' => false,///dont add line breaks before breakes
);
if( $tidy_config == '' )
{
$tidy_config = &$config;
}
$tidy = new tidy();
$out = $tidy->repairString($what_to_clean, $tidy_config, 'UTF8');
unset($tidy);
unset($tidy_config);
return($out);
}