Я вижу некоторые проблемы в вашем коде:
- Решение о том, имеет ли URI полный корневой путь (является полностью квалифицированным URI) или нет.
- You 'не разрешать относительные URL к базовому URL.Простое добавление не делает работу.
- Функция возвращает объект DomDocument, а не строку.Я предполагаю, что вы этого не хотите, но я не знаю, вы не написали в своем вопросе.
Как определить, является ли URL относительным.
Относительные URL не определяют протокол.Поэтому я бы проверил это, чтобы определить, является ли атрибут href полностью определенным (абсолютным) URI или нет ( Demo ):
$isRelative = (bool) !parse_url($url, PHP_URL_SCHEME);
Разрешение относительного URLна базовый URL
Однако это не поможет вам правильно разрешить относительный URL к базовому URL.То, что вы делаете, концептуально нарушено.В RFC указано, как разрешить относительный URI к базовому URL ( RFC 1808 и RFC 3986 ).Вы можете использовать существующую библиотеку, чтобы просто сделать работу за вас, рабочая - Net_URL2 :
require_once('Net/URL2.php'); # or configure your autoloader
$baseUrl = 'http://www.example.com/test/images.html';
$hrefRelativeOrAbsolute = '...';
$baseUrl = new Net_URL2($baseUrl);
$urlAbsolute = (string) $baseUrl->resolve($hrefRelativeOrAbsolute);