此处是文档链接:http://php.net/manual/en/class.domdocument.php#domdocument.props.documenturi
但是我不明白这个设置是否为此对象显示的值,或者是用户可以更改的设置?
这个值对loadHTML metod的html解析有什么影响吗?它可以用来绝对解析文档中的所有相对链接吗?
答案 0 :(得分:3)
好的,我希望我能正确解释。
以下是documentUri
的{{3}}:
在DOM Level 3中引入的
documentURI
类型DOMString
文档的位置,如果未定义或文档是使用
DOMImplementation.createDocument
创建的,则为null。设置此属性时不执行词法检查;使用Node.baseURI
时,这可能会导致返回null值。请注意,当Document支持“HTML”[DOM Level 2 HTML]功能时,HTML BASE元素的
href
属性在计算Node.baseURI
时优先于此属性。
这对您意味着什么?
但是我不明白这个设置是否为此对象显示的值,或者是用户可以更改的设置?
它是文档的URI。如果您加载远程URI(例如此页面),它将包含远程URI,例如当前显示在浏览器地址栏中的网址。该值是公开的,因此它是可写的。
这个值对
loadHTML
metod的html解析有什么影响吗?
理论上,是的。实际上,这取决于您的W3C DOM Interface specification。
它可以用来绝对解析文档中的所有相对链接吗?
不自动。但是你可以使用它将它手动添加到以路径开头的任何链接。当然,您需要实现逻辑来检查href
值是否需要自己扩展。
答案 1 :(得分:1)
PHP手册中详细解释了DOMDocuemnt::$documentURI
property:
文档的位置,如果未定义,则为NULL。
如果从某个位置加载文档,则设置为公共属性。这通常是分别在"file:///C:/Tests/dom/data/file1.xml"
或"data://text/html;encoding=base64,PHA+aGVsbG8gd29ybGQ8L3A+"
中使用的文件名(例如DOMDocument::load()
)或URI(DOMDocument::loadHTMLFile()
)。
如果加载XML字符串(DOMDocument::loadXML()
),则documentURI
是当前工作目录。
如果您加载HTML字符串(DOMDocument::loadHTML()
),则documentURI
为NULL
,如果该HTML中有<base href="">
元素,则无关紧要。
示例:
<?php
/**
* what is the purpose of DOMDocument->documentURI property?
* @link https://stackoverflow.com/q/4003543/367456
*/
$doc = new DOMDocument();
$doc->load(__DIR__ . '/data/file1.xml');
var_dump($doc->documentURI); # "file:///C:/Tests/dom/data/file1.xml"
$doc->loadHTMLFile(__DIR__ . '/data/file1.html');
var_dump($doc->documentURI); # "file:///C:/Tests/dom/data/file1.html"
$doc->loadXML('<p>hello world</p>');
var_dump($doc->documentURI); # "file:///C:/Tests/dom/" (current working directory)
$doc->loadHTML('<p>hello world</p>');
var_dump($doc->documentURI); # NULL
$doc->loadHTML('<base href="http://example.com/base/"><i>test</i>');
var_dump($doc->documentURI); # NULL
$doc->loadHTMLFile('data://text/html;encoding=base64,' . base64_encode('<p>hello world</p>'));
var_dump($doc->documentURI); # "data://text/html;encoding=base64,PHA+aGVsbG8gd29ybGQ8L3A+"
警告: 此属性可能是在DOM Core Level 3.0规范(与
DOMNode::$baseUri
一起)之后建模的,但是那个DOM Core Level(一个如此)名为功能版)的是not supported by PHP's DOMDocument。
此属性可用于设置/解析HTML文档的基URI。如果是NULL
或空字符串,则需要提供自己的字符串。有关解析文档中/的链接的示例,请参阅problem with adding root path using php domdocument以获取更多信息。