Какова цель свойства DOMDocument-> documentURI? - PullRequest
4 голосов
/ 23 октября 2010

вот ссылка на документацию: http://php.net/manual/en/class.domdocument.php#domdocument.props.documenturi

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

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

Ответы [ 2 ]

3 голосов
/ 23 октября 2010

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

Ниже приведена спецификация интерфейса DOM W3C для documentUri:

documentURI типа DOMString, введено в DOM Level 3

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

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

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

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

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

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

В теории да. Практически, это зависит от того, имеет ли ваша DOMImplementation функцию HTML 2.0 .

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

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

1 голос
/ 15 июля 2013

Свойство DOMDocuemnt::$documentURI хорошо объяснено в руководстве по 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, и не имеет значения, есть ли в этом 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 (так называемая функциональная версия ) не поддерживается PHP DOMDocument .

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

...