我想解析一个html文件。
$html =htmlentities( file_get_contents('http://forums.heroesofnewerth.com/showthread.php?553261'));
$dom = new DOMDocument();
$dom->loadHTML($html);//line 30
我收到这些错误
Warning: DOMDocument::loadHTML(): htmlParseEntityRef: expecting ';' in Entity, line: 113 in D:\Projects\Web projects\done\honscript\index.php on line 30
Warning: DOMDocument::loadHTML(): htmlParseEntityRef: expecting ';' in Entity, line: 113 in D:\Projects\Web projects\done\honscript\index.php on line 30
Warning: DOMDocument::loadHTML(): htmlParseEntityRef: expecting ';' in Entity, line: 200 in D:\Projects\Web projects\done\honscript\index.php on line 30
Warning: DOMDocument::loadHTML(): htmlParseEntityRef: expecting ';' in Entity, line: 200 in D:\Projects\Web projects\done\honscript\index.php on line 30
更改为使用htmlenttities并获取
Warning: DOMDocument::loadHTML(): Empty string supplied as input in D:\Projects\Web projects\done\honscript\index.php on line 30
答案 0 :(得分:0)
您尝试加载的文档不是有效的HTML,因此不是有效的DOM(有关该页面上HTML列表错误的详细列表,请参阅http://validator.w3.org/check?verbose=1&uri=http%3A%2F%2Fforums.heroesofnewerth.com%2Fshowthread.php%3F553261。)
所以PHP基本上必须猜测它提供的HTML的含义并警告它(它可能会猜错)。
& HTML中的一个特殊字符,用于转义特殊字符(例如,在HTML页面中打印<你必须编写& lt;。它在URL中也有特殊含义作为请求变量的分隔符(例如http://example.com?foo=bar&braz=omfg)因此在网站上出现了很多。在HTML中编写&的正确方法是& amp ;.
可能猜测是正确的,DOMDocument可以正常工作。所以你可以像这样压制这个警告:
@$dom->loadHTML($html);
否则你必须以某种方式修复HTML。只是通过上面提到的htmlentities运行它将无法工作,因为它也将逃避所有标记标记等。
可能有效的是取代所有&同 &放大器;放大器;虽然这可能导致其他后果,因为& amp;会成为& amp; amp;所以你只需要替换那些没有放大器的那些&。