PHP DOMDocument:: loadHTML() [domdocument.loadhtml]: htmlParseEntityRef: нет имени в Entity
Я пытаюсь получить элементы "ссылки" с определенных веб-страниц. Я не могу понять, что я делаю неправильно. Я получаю следующую ошибку:
Уровень важности: предупреждение
Сообщение: DOMDocument:: loadHTML() [domdocument.loadhtml]: htmlParseEntityRef: нет имени в Entity, строка: 536
Имя файла: controllers/test.php
Номер строки: 34
В коде приведена строка 34:
$dom->loadHTML($html);
мой код:
$url = "http://www.amazon.com/";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
if($html = curl_exec($ch)){
// parse the html into a DOMDocument
$dom = new DOMDocument();
$dom->recover = true;
$dom->strictErrorChecking = false;
$dom->loadHTML($html);
$hrefs = $dom->getElementsByTagName('a');
echo "<pre>";
print_r($hrefs);
echo "</pre>";
curl_close($ch);
}else{
echo "The website could not be reached.";
}
Ответы
Ответ 1
Это означает, что некоторые из HTML-кода недопустимы.
Это просто предупреждение, а не ошибка. Ваш script все равно обработает его. Чтобы подавить установленные предупреждения
libxml_use_internal_errors(true);
Или вы можете просто полностью подавить предупреждение, выполнив
@$dom->loadHTML($html);
Ответ 2
Это может быть вызвано символом жулика &
, которому сразу же соответствует соответствующий тег. В противном случае вы получите отсутствующую ошибку ;
. Смотрите: Предупреждение: DOMDocument:: loadHTML(): htmlParseEntityRef: ожидание ';' в Entity,.
Решение - заменить символ &
на &
или если у вас должен быть этот &
, как он есть, возможно, вы можете заключить его в: <![CDATA[
- ]]>
Ответ 3
HTML плохо сформирован. Если сформировать достаточно слабо, загрузка HTML в документ DOM может даже завершиться неудачей. Если loadHTML не работает, то подавление ошибок бессмысленно. Я предлагаю использовать такой инструмент, как HTML Tidy, чтобы "очистить" плохо сформированный HTML, если вы не можете загрузить HTML в DOM.
HTML Tidy можно найти здесь http://www.htacg.org/tidy-html5/