Как стать автором
Обновить

Приведение ссылок к абсолютному URI

Время на прочтение1 мин
Количество просмотров5.6K
Забавная функция. Выполняет преобразование относительных uri-адресов в абсолютные.
Может помочь новичкам при организации поиска по сайту.
Хороший пример с location().

Источник и примеры использования здесь



/**
* Приведение ссылки к абсолютному URI
*
* @param string $link ссылка (абсолютный URI, абсолютный путь на сайте, относительный путь)
* @param string $base базовый URI (можно без "http://")
* @return string абсолютный URI ссылки
*/
function uri2absolute($link, $base)
{
if (!preg_match('~^(http://[^/?#]+)?([^?#]*)?(\?[^#]*)?(#.*)?$~i', $link.'#', $matchesLink)) {
return false;
}
if (!empty($matchesLink[1])) {
return $link;
}
if (!preg_match('~^(http://)?([^/?#]+)(/[^?#]*)?(\?[^#]*)?(#.*)?$~i', $base.'#', $matchesBase)) {
return false;
}
if (empty($matchesLink[2])) {
if (empty($matchesLink[3])) {
return 'http://'.$matchesBase[2].$matchesBase[3].$matchesBase[4];;
}
return 'http://'.$matchesBase[2].$matchesBase[3].$matchesLink[3];
}
$pathLink = explode('/', $matchesLink[2]);
if ($pathLink[0] == '') {
return 'http://'.$matchesBase[2].$matchesLink[2].$matchesLink[3];
}
$pathBase = explode('/', preg_replace('~^/~', '', $matchesBase[3]));
if (sizeOf($pathBase) > 0) {
array_pop($pathBase);
}
foreach ($pathLink as $p) {
if ($p == '.') {
continue;
} elseif ($p == '..') {
if (sizeOf($pathBase) > 0) {
array_pop($pathBase);
}
} else {
array_push($pathBase, $p);
}
}
return 'http://'.$matchesBase[2].'/'.implode('/', $pathBase).$matchesLink[3];
}
Теги:
Хабы:
Всего голосов 10: ↑6 и ↓4+2
Комментарии17

Публикации

Истории

Работа

PHP программист
123 вакансии

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
14 сентября
Конференция Practical ML Conf
МоскваОнлайн
19 сентября
CDI Conf 2024
Москва
20 – 22 сентября
BCI Hack Moscow
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
25 сентября
Конференция Yandex Scale 2024
МоскваОнлайн
28 – 29 сентября
Конференция E-CODE
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн