domdocument — Почему php DOM по-разному обрабатывает элементы на разных машинах?

С этим кодом:

<?php
$s = '<h1>Header</h1>';
$dom = new DOMDocument();
$dom->loadHTML($s, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
var_dump($dom->documentElement->childNodes->item(0));
?>

На моей машине разработки, var_dump выплевывает DOMText объект, но на моей производственной машине он возвращает DOMElement объект.

Производственный сервер работает php 5.4.33 с libxml 2.7.8

Dev машина работает php 5.4.4 с libxml 2.8.0

0

Решение

Вероятно, это связано с различными версиями PHP:
DOMDocument::loadHTML метод принял только секунду ($options) аргумент начиная с PHP 5.4, он указан на журнал изменений:

5.4.0 DOMDocument :: loadHTML Добавлен параметр options.
DOMDocument :: loadHTMLFile Добавлен параметр параметров.

Изменения также перечислены на DOMDocument::loadHTML страницы документа

Обновить:

После некоторых раскопок я нашел много противоречивой информации о LIBXML_HTML_NODEFDTD постоянная. согласно документации, он доступен в> = libxml 2.7.7, тогда как другие источники противоречат этому. Я нашел несколько проектов, которые определяют эту константу вручную, и ответ здесь в котором говорится, что эта константа только доступно в libxml 2.7.8.
Это может объяснить разницу между вашими 2 средами. Проект с открытым исходным кодом на GitHub решает эту проблему, просто определяя константу, если необходимо:

defined('LIBXML_HTML_NODEFDTD') || define ('LIBXML_HTML_NODEFDTD', 4);
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]