Я пытаюсь разобрать содержание любого URL-адреса. Который не должен содержать HTML-код. Это прекрасно работает, но дает кучу ошибок при чтении содержимого по указанному URL. Как удалить это предупреждение?
<?php $url= 'http://stackoverflow.com/questions/12097352/how-can-i-parse-dynamic-content-from-a-web-page'; $doc = new DOMDocument(); $doc->loadHTMLFile($url); $xpath = new DOMXPath($doc); foreach($xpath->query("//script") as $script) { $script->parentNode->removeChild($script); } $textContent = $doc->textContent; //inherited from DOMNode echo $textContent; ?>
Предупреждения:
content-from-a-web-page, line: 255 in /opt/lampp/htdocs/FB/ec2/test.php on line 13 Warning: DOMDocument::loadHTMLFile(): htmlParseEntityRef: expecting ';' in http://stackoverflow.com/questions/12097352/how-can-i-parse-dynamic-content-from-a-web-page, line: 255 in /opt/lampp/htdocs/FB/ec2/test.php on line 13 Warning: DOMDocument::loadHTMLFile(): htmlParseEntityRef: expecting ';' in http://stackoverflow.com/questions/12097352/how-can-i-parse-dynamic-content-from-a-web-page, line: 273 in /opt/lampp/htdocs/FB/ec2/test.php on line 13 Warning: DOMDocument::loadHTMLFile(): htmlParseEntityRef: expecting ';' in http://stackoverflow.com/questions/12097352/how-can-i-parse-dynamic-content-from-a-web-page, line: 273 in /opt/lampp/htdocs/FB/ec2/test.php on line 13 Warning: DOMDocument::loadHTMLFile(): htmlParseEntityRef: expecting ';' in http://stackoverflow.com/questions/12097352/how-can-i-parse-dynamic-content-from-a-web-page, line: 412 in /opt/lampp/htdocs/FB/ec2/test.php on line 13 Warning: DOMDocument::loadHTMLFile(): htmlParseEntityRef: expecting ';' in http://stackoverflow.com/questions/12097352/how-can-i-parse-dynamic-content-from-a-web-page, line: 412 in /opt/lampp/htdocs/FB/ec2/test.php on line 13 Warning: DOMDocument::loadHTMLFile(): htmlParseEntityRef: expecting ';' in http://stackoverflow.com/questions/12097352/how-can-i-parse-dynamic-content-from-a-web-page, line: 551 in /opt/lampp/htdocs/FB/ec2/test.php on line 13 Warning: DOMDocument::loadHTMLFile(): htmlParseEntityRef: expecting ';' in http://stackoverflow.com/questions/12097352/how-can-i-parse-dynamic-content-from-a-web-page, line: 551 in /opt/lampp/htdocs/FB/ec2/test.php on line 13 Warning: DOMDocument::loadHTMLFile(): ID display-name already defined in http://stackoverflow.com/questions/12097352/how-can-i-parse-dynamic-content-from-a-web-page, line: 731 in /opt/lampp/htdocs/FB/ec2/test.php on line 13
Вы можете использовать libxml_use_internal_errors()
и сделать следующее:
libxml_use_internal_errors(true); $doc->loadHTMLFile($url); libxml_clear_errors();
Как отметил Пихаа в комментариях ниже, рекомендуется сбросить состояние ошибок. Вы можете сделать это, как показано ниже:
$errors = libxml_use_internal_errors(true); //store $doc->loadHTMLFile($url); libxml_clear_errors(); libxml_use_internal_errors($errors); //reset back to previous state
Вот как это работает:
libxml_use_internal_errors()
сообщает libxml обрабатывать ошибки и предупреждения внутренне и не выводить их в браузер. Также сохраняйте текущее состояние ошибок в переменной loadHTML()
метода loadHTML()
libxml_clear_errors
Демо!