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,.

Решение - заменить символ & на &amp;
или если у вас должен быть этот &, как он есть, возможно, вы можете заключить его в: <![CDATA[ - ]]>

Ответ 3

HTML плохо сформирован. Если сформировать достаточно слабо, загрузка HTML в документ DOM может даже завершиться неудачей. Если loadHTML не работает, то подавление ошибок бессмысленно. Я предлагаю использовать такой инструмент, как HTML Tidy, чтобы "очистить" плохо сформированный HTML, если вы не можете загрузить HTML в DOM.

HTML Tidy можно найти здесь http://www.htacg.org/tidy-html5/