我使用DOMDocument编辑一些HTML文件,但是一些主题在其名称空间中.所以DOMDocument自动将空格更改为%20,然后找不到它们.
这就是如何准确查看错误:
Warning: DOMDocument::load() [domdocument.load]: Entity 'nbsp' not defined in file:///C:/Path/To/The/File/01%20c%2040-1964.html, line: 11 in C:/Path/To/class.php on line 51
Run Code Online (Sandbox Code Playgroud)
你知道如何修复这个错误吗?
提前感谢您的回答
我有一个很大的问题,PHP DOMDocument :: validate()似乎系统地询问了DTD.
当我想验证例如这里解释的XHTML文档时,这是一个大问题.
由于w3.org似乎拒绝来自PHP服务器的所有请求,因此使用此方法验证我的文档是不可能的......
那有什么解决方案吗?
谢谢你提前
[编辑]以下是一些准确性:
/var/www/test.php:
<?php
$implementation = new DOMImplementation();
$dtd = $implementation->createDocumentType
(
'html', // qualifiedName
'-//W3C//DTD XHTML 1.0 Transitional//EN', // publicId
'http://www.w3.org/TR/xhtml1/DTD/xhtml1-'
.'transitional.dtd' // systemId
);
$document = $implementation->createDocument('', '', $dtd);
$document->validate();
Run Code Online (Sandbox Code Playgroud)
[ http://] 127.0.0.1/test.php:
Warning: DOMDocument::validate(http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd): failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden
in /var/www/test.php on line 14
Warning: DOMDocument::validate(): I/O warning : failed to load external entity "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" in /var/www/test.php on line 14
Warning: DOMDocument::validate(): …Run Code Online (Sandbox Code Playgroud) 我需要将一些任意HTML加载到现有DOMDocument树中.以前的答案建议使用DOMDocumentFragment及其appendXML方法来处理这个问题.
正如@Owlvark在评论中指出的那样,xml不是html,因此这不是一个好的解决方案.
我遇到的主要问题是像这样的实体&ndash导致错误,因为该appendXML方法需要格式良好的XML.
我们可以定义实体,但这并不能解决并非所有html都是有效的xml的问题.
将HTML导入DOMDocument树中的好方法是什么?