Когда я очищаю содержимое с некоторых страниц, скрипт дает относительный URL. Можно ли получить абсолютный URL-адрес с помощью Simple HTML DOM?
Я не думаю, что простой HTML DOM Parser может это сделать.
Но вы можете сделать это самостоятельно. Сначала вам нужно отличить базовый URI, который является URI документа, если не объявлен иначе (см. Элемент BASE
). Затем получите каждую ссылку на URI и примените алгоритмы для разрешения относительного URI, как описано в RFC 3986 (уже существуют классы, которые вы можете использовать для этого, как пакет PEAR Net_URL2 ).
Итак, используя эти два класса, вы можете сделать что-то вроде этого:
$uri = new Net_URL2('http://example.com/foo/bar'); // URI of the resource $baseURI = $uri; foreach ($html->find('base[href]') as $elem) { $baseURI = $uri->resolve($elem->href); } foreach ($html->find('*[src]') as $elem) { $elem->src = $baseURI->resolve($elem->src)->__toString(); } foreach ($html->find('*[href]') as $elem) { if (strtoupper($elem->tag) === 'BASE') continue; $elem->href = $baseURI->resolve($elem->href)->__toString(); } foreach ($html->find('form[action]') as $elem) { $elem->action = $baseURI->resolve($elem->action)->__toString(); }
Повторите подстановку для любого другого атрибута, содержащего URI, например, background
, cite
, classid
, codebase
, data
, longdesc
, profile
и usemap
(см. Индекс атрибутов в HTML 4.01 ).
В дополнение к ответу @ Artefacto, и если вы выгружаете скопированный HTML-код где-то, вы можете просто добавить <base href="http://example.com">
в начало документа, в котором будет установлен базовый URL-адрес для всех относительные URL-адреса в документе в качестве указанного href
. Взгляните на http://www.w3schools.com/tags/tag_base.asp
EDIT См. Ответ Gumbo для формально правильного ответа. Это упрощенный алгоритм, который будет работать в подавляющем большинстве случаев, но не сработает.
Конечно. Сделай это:
http://
, https://
или любого другого протокола, а также не начинается с /
). explode
?
а затем возьмите первый элемент результирующего массива (возьмите элемент с индексом 0
или используйте reset
).
/
, добавьте ее относительный URL-адрес, и у вас есть конечный URL-адрес. /
, возьмите dirname
из него и добавьте его относительный URL-адрес. Теперь у вас есть конечный URL.