LuZ LuZ - 5 months ago 32
PHP Question

Dom loadHTML doesn't work properly on a server

I run the code first on MAMP and it worked very well. But when I tried to run the code on another server, I got a lot of warnings like:


Warning: DOMDocument::loadHTML(): Unexpected end tag : head in Entity,
line: 3349 in /cgihome/zhang1/html/cgi-bin/getPrice.php on line 17
Warning: DOMDocument::loadHTML(): htmlParseStartTag: misplaced tag in
Entity, line: 3350 in /cgihome/zhang1/html/cgi-bin/getPrice.php on
line 17 Warning: DOMDocument::loadHTML(): Tag header invalid in
Entity, line: 3517 in /cgihome/zhang1/html/cgi-bin/getPrice.php on
line 17


The codes are following:

<?php
$amazon = file_get_contents('http://www.amazon.com/blablabla');
$doc = new DOMdocument();
$doc->loadHTML($amazon);
$doc->saveHTML();
$price = $doc -> getElementById('actualPriceValue')->textContent;
$ASIN = $doc -> getElementById('ASIN')->getAttribute('value');
?>


Anyone knows what's going on? Thanks!

Answer

To disable the warning, you can use

libxml_use_internal_errors(true);

This works for me. Manual

Background: You are loading invalid HTML. Invalid HTML is quite common, DOMDocument::loadHTML corrects most of the problems, but gives warnings by default.

With libxml_use_internal_errors you can control that behavior. Set it before loading the document:

libxml_use_internal_errors(true);
$doc->loadHTML($amazon);
Comments