PHP返回具有名称而不是ID的元素

PHP返回具有名称而不是ID的元素,php,dom,domdocument,getelementbyid,Php,Dom,Domdocument,Getelementbyid,在以下PHP代码DOMDocument::getElementById中,返回节点,而不是节点: 只有节点才会发生这种情况。这是有意的吗 JavaScript按照我的预期处理它: addEventListener('DOMContentLoaded',function(){ document.body.innerHTML=''; log(document.getElementById('test'); }); 编辑(问题被标记为重复):这个问题不是关于我应该使用name还是id,也不是关

在以下PHP代码
DOMDocument::getElementById
中,返回节点
,而不是节点


只有
节点才会发生这种情况。这是有意的吗

JavaScript按照我的预期处理它:


addEventListener('DOMContentLoaded',function(){
document.body.innerHTML='';
log(document.getElementById('test');
});

编辑(问题被标记为重复):这个问题不是关于我应该使用
name
还是
id
,也不是关于同时使用
name
id
,而是为什么PHP在我搜索id时会找到带有
name
属性的节点。

a中的
name
属性标记,因此它看起来像是更改为
id
属性。

如您所知

对于HTML文档(以及text/HTMLMIME类型),必须遵循以下处理模型来确定文档的指定部分

解析URL,并让fragid作为URL的组件。 如果fragid是空字符串,则文档的指示部分是文档的顶部。 如果DOM中有一个ID完全等于fragid的元素,那么树顺序中的第一个这样的元素就是文档的指定部分;在这里停止算法。 如果DOM中有一个a元素的name属性的值正好等于fragid,那么树顺序中的第一个这样的元素就是文档的指定部分;在这里停止算法。 否则,文件中没有指定的部分

当我将您的代码粘贴到PHP沙盒时,我注意到一个有趣的警告:

这很可能是PHP模仿旧IE行为的结果。在IE 7和早期版本中,document.getElementById()确实将
元素上的名称属性视为id属性,因此将匹配
元素而不是
元素。IE已经发展很久了,但PHP在这一点上似乎还没有发展。

请参阅:您是否尝试过:
$doc->getAttribute('id')
?可能与Kenneth Bregat重复这只会获取文档的id。我尝试获取具有特定id的节点。不幸的是,我无法更改HTML,但必须对其进行解析,并且还有另一个带有name属性的
节点。解决这一问题并不难,但我想知道为什么它不能像我预期的那样工作。是的,我有这个警告,PHP以某种方式解释了
。我尝试解析的页面是XHTML 1.0,但我想你是对的,PHP并不真正关心Doctype。
<?php
$doc = new DOMDocument();
$doc->loadHTML('<a name="test"></a><div id="test"></div>'); // triggers duplicate ID warning
echo $doc->getElementById("test")->nodeName; // outputs "a"
?>