Раздел вопрос-ответ Ошибка DOMDocument::loadHTML() expects parameter 1 to be a valid path, string given

При работе с DOMDocument возникает следующая ошибка:

DOMDocument::loadHTML() expects parameter 1 to be a valid path, string given

Хотя в loadHTML передаётся обычная html-строка.

$dom = new DOMDocument('1.0');
libxml_use_internal_errors(true);
$success = $dom->loadHTML($htmlString);
libxml_clear_errors();

Причём на сервере с PHP 5.4.41 эта ошибка постоянно возникает на определённых данных. А на сервере PHP 5.4.24 ошибка ни разу не возникла. Не знаю, как это можно объяснить. Возможно версия php тут совсем не при чём.

Upd 1:

libxml_use_internal_errors(true); и $dom->strictErrorChecking = false; не помогают избежать ошибки.

Upd 2:

Отлавливать ErrorException помогло.

share

2 ответа

Это известный баг php. Под номером #69679. Баг еще не закрыт.

DOMDocument::loadHTML() expects parameter 1 to be a valid path, string given

Ошибка  связана с тем, что в строке присутствует нулевой байт (U+0000).

Человек на github под ником cmb69  уже открыл ПР, чтобы пофиксить этот баг. В какую версию php попадёт фикс, я пока что не знаю.

Если вы всё же хотите отлавливать эту ошибку, то на данный момент самым надёжным решением является отлавливать ErrorException при вызове DOMDocument::loadHTML()

$doc = new DOMDocument();
$html = "<html><body>U+0000 <span>\x0</span></body></html>";
try {
     $doc->loadHTML($html);
}
catch(ErrorException $e) {
    // can`t loadHTML
}

 

Добавить комментарий
    как минимум 5 символов

    А ещё надёжней сделать:

    @$dom->loadHTML($html);

    Хотя всё это костыли.

    Добавить комментарий
      как минимум 5 символов

      icon Вход в систему

      зарегистрироваться
      НОВЫЕ ПОЛЬЗОВАТЕЛИ