Сначала я запускаю код на MAMP, и он работал очень хорошо. Но когда я попытался запустить код на другом сервере, у меня появилось много предупреждений:
Предупреждение: DOMDocument :: loadHTML (): Неожиданный конечный тег: head в Entity, строка: 3349 в /cgihome/zhang1/html/cgi-bin/getPrice.php в строке 17 Предупреждение: DOMDocument :: loadHTML (): htmlParseStartTag: неуместно тег в Entity, строка: 3350 в /cgihome/zhang1/html/cgi-bin/getPrice.php в строке 17 Предупреждение: DOMDocument :: loadHTML (): заголовок тега недействителен в Entity, строка: 3517 in / cgihome / zhang1 / html /cgi-bin/getPrice.php в строке 17
Коды следующие:
<?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'); ?>
Кто-нибудь знает, что происходит? Благодаря!
Чтобы отключить предупреждение, вы можете использовать
libxml_use_internal_errors(true);
Это работает для меня. Руководство
Предпосылки: вы загружаете недействительный HTML. Недопустимый HTML довольно распространен, DOMDocument::loadHTML
исправляет большинство проблем, но дает предупреждения по умолчанию.
С помощью libxml_use_internal_errors
вы можете контролировать это поведение. Установите его перед загрузкой документа:
libxml_use_internal_errors(true); $doc->loadHTML($amazon);
Вы можете подавить предупреждение следующим образом:
@$doc->loadHTML($amazon);
Эта проблема связана с кодом не xHTML
Поскольку DOMdocument () может обрабатывать только чистый XHTML, вам нужно очистить свой код
Php имеет расширение, которое делает работу довольно хорошо. Вызывается Tidy php.net/book.tidy
Это может быть сложно, поскольку вам может потребоваться включить его в php.ini
затем
$tidy_config = array( 'clean' => true, 'output-xhtml' => true, 'show-body-only' => true, 'wrap' => 0, ); $tidy = tidy_parse_string( $html, $tidy_config, 'UTF8'); $tidy->cleanRepair(); $doc = new DOMdocument(); $doc->loadHTML( (string) $tidy);