2010-10-23 2 views
4

здесь ссылка на документацию: http://php.net/manual/en/class.domdocument.php#domdocument.props.documenturiКакова цель свойства DOMDocument-> documentURI?

Но я не понимаю, является ли эта настройка значением, которое этот объект обнаруживает, или этот параметр может изменить пользователь?

Имеет ли это значение какое-либо влияние на синтаксический анализ html методом loadHTML? Может ли это использоваться для абсолютизации всех относительных ссылок в анализируемом документе?

ответ

3

Хорошо, я надеюсь, что правильно объясню.

Ниже приводится W3C DOM Interface specification для documentUri:

documentURI типа DOMString, введенного в DOM Уровень 3

Расположение документа или нулевой, если не определено или если документ был создан с помощью DOMImplementation.createDocument , При установке этого атрибута не выполняется лексическая проверка; это может привести к возврату нулевого значения при использовании Node.baseURI.

Остерегайтесь того, что если документ поддерживает функцию «HTML» [DOM Level 2 HTML], атрибут href элемента HTML BASE имеет преимущество перед этим атрибутом при вычислении Node.baseURI.

Что это значит для вас?

Но я не понимаю, является ли эта установка значением, которое этот объект обнаруживает, или этот параметр может изменить пользователь?

Это URI документа. Если вы загружаете удаленный URI, например, например, эту страницу, он будет содержать удаленный URI, например. URL, отображаемый в настоящее время в адресной строке браузера. Значение является общедоступным, поэтому оно доступно для записи.

Имеет ли это значение какое-либо влияние на разбор html по loadHTML методу?

Теоретически, да. Практически, это зависит от вашего DOMImplementation has the HTML 2.0 feature.

Может ли это использоваться для абсолютизации всех относительных ссылок в анализируемом документе?

Не автоматически. Но вы можете очень использовать его, чтобы добавить его вручную к любым ссылкам, начинающимся с пути. Конечно, вам нужно реализовать логику, чтобы проверить, нужно ли расширять значение href.

1

The DOMDocuemnt::$documentURI property хорошо объясняется в PHP инструкции:

Расположение документа или NULL, если не определено.

Это общедоступное свойство, которое устанавливается, если вы загружаете документ из местоположения. Обычно это имя файла (например,"file:///C:/Tests/dom/data/file1.xml") или URI ("data://text/html;encoding=base64,PHA+aGVsbG8gd29ybGQ8L3A+"), используемые в DOMDocument::load() или DOMDocument::loadHTMLFile() соответственно.

Если вы загружаете XML-строку (DOMDocument::loadXML()), то documentURI является текущим рабочим каталогом.

Если вы загружаете HTML строку (DOMDocument::loadHTML()), то documentURI является NULL, и это не имеет значения, если есть <base href=""> элемент в этом HTML или нет.

Примеры:

<?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 Базового уровня 3.0 спецификации (в сочетании с DOMNode::$baseUri), однако, что уровень РОМА ядра (так называемый Feature Version) - not supported by PHP's DOMDocument.

Это свойство может использоваться для установки/разрешения базового URI документа HTML. Если это NULL или пустая строка, вам необходимо предоставить ее самостоятельно. Пример получения ссылок в документе/см. В разделе problem with adding root path using php domdocument для получения дополнительной информации.

Смежные вопросы