DOMDocument::loadHTML() ожидает, что параметр 2 будет длинным, строка задается при попытке использовать параметр LIBXML_HTML_NOIMPLIED

В настоящее время, когда я использую объект DOMDocument и вызываю saveHTML(), он автоматически добавляет некоторые html-теги, которые мне не нужны. Я попробовал решение, предложенное здесь (https://stackoverflow.com/a/31426408/3659230), и когда я это сделаю, я получить эту ошибку:

DOMDocument::loadHTML() ожидает, что параметр 2 будет длинным, задана строка

$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'), LIBXML_HTML_NOIMPLIED|LIBXML_HTML_NODEFDTD);

Кажется довольно простым, но я не могу заставить его работать. Я использую PHP версии 5.5.3.


person dpst    schedule 01.12.2016    source источник


Ответы (1)


LIBXML_HTML_NOIMPLIED и LIBXML_HTML_NODEFDTD определены только в PHP 5.4 и выше.

Если константа не определена, PHP (идиотски) рассматривает ее как строку. Итак, в PHP 5.3 и ниже ваш код на самом деле

$doc->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'), 'LIBXML_HTML_NOIMPLIED'|'LIBXML_HTML_NODEFDTD');

или, как только побитовый оператор был выполнен:

$doc->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'), 'LIBXML_HTML_NOMMVL]ED');

Что явно не то, что вы имеете в виду! Ваш лучший вариант, если это возможно, — перейти на более новую версию PHP.

person lonesomeday    schedule 01.12.2016
comment
Я использую PHP версии 5.5.3, поэтому проблема не в версии. - person dpst; 02.12.2016
comment
@dpst Можете ли вы тогда проверить версию libxml? var_dump(LIBXML_DOTTED_VERSION); - person lonesomeday; 02.12.2016
comment
версия libxml 2.7.6 - person dpst; 06.12.2016
comment
версия, кажется, проблема. LIBXML_HTML_NOIMPLIED не поддерживается до версии 2.7.7 (php .net/manual/ru/) - person dpst; 06.12.2016