使用此代码:
<?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 :(得分:1)
它可能与不同的PHP版本有关:
DOMDocument::loadHTML
方法仅接受自PHP 5.4起的第二个($options
)参数,它在the changelog上列出:
5.4.0 DOMDocument :: loadHTML添加了选项参数 DOMDocument :: loadHTMLFile添加了options参数。
更改也列在on the DOMDocument::loadHTML
doc pages
更新
经过一番挖掘,我发现了很多关于LIBXML_HTML_NODEFDTD
常数的矛盾信息。根据文档,它在&gt; = libxml 2.7.7中可用,而其他来源与此相矛盾。我发现了一些手动定义此常量的项目,an answer here表示此常量仅在 中可用于libxml 2.7.8。
这可以解释您的2个环境之间的差异。 An open-source project on github只需要根据需要定义常量来解决这个问题:
defined('LIBXML_HTML_NODEFDTD') || define ('LIBXML_HTML_NODEFDTD', 4);