Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Can';t呈现页面,或DOMDocumentFragment在<;脚本>;标签之类的_Php_Javascript_Domdocument - Fatal编程技术网

Php Can';t呈现页面,或DOMDocumentFragment在<;脚本>;标签之类的

Php Can';t呈现页面,或DOMDocumentFragment在<;脚本>;标签之类的,php,javascript,domdocument,Php,Javascript,Domdocument,经过一些尝试和错误,我注意到我的模板引擎在包含标记的模板文件上失败。这显然是一个巨大的问题,但我似乎不明白为什么它会失败 它失败的方式也很奇怪。注释掉标记后,页面正常加载,但是如果标记未注释,页面加载和执行查看源代码显示整个页面已加载,尽管浏览器中没有呈现任何内容。FirebugDOM检查器显示一个头部标记和一个空主体 奇怪的是(至少我认为)这些脚本标记的目标是外部文件。如果CDATA部分之外有页面内脚本,我可以理解一些意外的结果 我会发布使用的代码,但它非常长,我不知道从哪里开始,即;问题在哪

经过一些尝试和错误,我注意到我的模板引擎在包含
标记的模板文件上失败。这显然是一个巨大的问题,但我似乎不明白为什么它会失败

它失败的方式也很奇怪。注释掉
标记后,页面正常加载,但是如果
标记未注释,页面加载和执行查看源代码显示整个页面已加载,尽管浏览器中没有呈现任何内容。FirebugDOM检查器显示一个头部标记和一个空主体

奇怪的是(至少我认为)这些脚本标记的目标是外部文件。如果CDATA部分之外有页面内脚本,我可以理解一些意外的结果

我会发布使用的代码,但它非常长,我不知道从哪里开始,即;问题在哪里,如果事实上还有问题的话

简而言之,我的模板引擎创建一个
DOMDocument
对象,然后创建
DOMDocumentFragment
对象来管理模板的各个部分。第一次解析迭代通常将整个模板文件加载到一个片段中,然后根据某些参数沿着树向下运行,查找某些标记


TL;DR:有人知道为什么PHP DOM类由于脚本标记而无法正确构建页面吗?如果我将它们括在
标记中,它将什么也不做。只有当我删除或注释掉标记时,浏览器才会加载并呈现页面。

脚本标记的内容是否包装在CDATA块中?否则,DOM将尝试解析其内容并失败。确保所有脚本代码都包装在CDATA块中,并且DOM解析器配置为输出CDATA块(否则输出将包含空脚本标记)


我还建议将尽可能多的脚本代码从页面中删除,并将其放在自己的文件中,然后使用
标记链接到这些文件中。这避免了DOM解析问题,还有一个额外的好处,即浏览器只需加载代码一次,就可以在后续页面视图中缓存代码

您能给我们提供最简单的代码复制吗?我会将主电源线重新布线到电路“B”。或者,尝试反向相位。这不会直接回答你的问题,尽管它可能与你的麻烦有关。您似乎不完全清楚什么是服务器端(php),什么是客户端(html、css、javascript)。我之所以这样说,是因为您提到php可能是导致此问题的原因,尽管您看到了html源代码的全部内容。作为一名web开发人员,理解这一区别非常重要,因为它会给您带来无尽的困惑。您的问题需要在客户端找到,然后才能找到解决方案。@chris;是的,我打字很激烈,没有详细说明必要的地方。DOM对象正在注入名称空间属性,并对空节点(尤其是脚本标记)执行一些奇怪的操作。DOM构建我的树,将其导出并发送。当浏览器接收并加载该树时,由于某种原因,格式错误的节点完全无法描述,完全破坏了页面。此外,我注意到,在我最后的评论中,如果我只是在脚本标记中添加一条评论,它就可以工作了。。。有点
//foo
它似乎仍然会中断,可能是因为
DOCTYPE
被剥离了,但这肯定不是解决方案。@Gordon;是的,脚本已经外部化了。这是我困惑的一部分,因为没有脚本来破坏
DOM
对象解析。它只是具有适当属性的空脚本标记。这个项目似乎有一个薄弱的基础。我开始想废品。至少我学到了很多关于PHP的
DOM
实现和XSD的知识?在这种情况下,文档的解析是否正确?如果您使用的是XML HTML序列化(XHTML),那么您也可以尝试使用PHP的XML解析库来代替DOMDocument。