Функция cot_http_build_url в Cotonti

позволяет корректно восстановить URL, учитывая такие элементы, как схема, данные авторизации, хост, порт, путь, параметры запроса и якорь.

Функция cot_http_build_url собирает строку URL из массива частей (результата функции cot_parse_url). Она позволяет корректно восстановить URL, учитывая такие элементы, как схема, данные авторизации, хост, порт, путь, параметры запроса и якорь.

Код функции:
 

function cot_http_build_url($urlp)
{
    $url = ''; // Переменная для хранения собранного URL
    $port = ''; // Переменная для хранения порта

    // Проверяем и обрабатываем порт
    if (!empty($urlp['port'])) {
        $port = (string)intval($urlp['port']); // Приводим порт к целому числу
        if ($urlp['port'] != $port) $port = ''; // Если порт некорректный, очищаем значение
    }

    // Добавляем схему (например, http:// или https://)
    if (!empty($urlp['scheme'])) $url .= $urlp['scheme'] . '://';

    // Добавляем данные авторизации (логин и пароль)
    if (!empty($urlp['user'])) {
        if (!empty($urlp['pass'])) {
            $url .= $urlp['user'] . ':' . $urlp['pass'] . '@';
        } else {
            $url .= $urlp['user'] . '@';
        }
    }

    // Добавляем хост (например, example.com)
    if (!empty($urlp['host'])) $url .= $urlp['host'];

    // Добавляем порт (если он указан и не равен 80)
    if ($port && $port != '80' && preg_match('/^\d+$/', $port)) $url .= ':' . $port;

    // Проверяем и добавляем путь
    if (
        (empty($urlp['path']) && (!empty($urlp['query']) || !empty($urlp['fragment']))) ||
        (!empty($urlp['path']) && substr($urlp['path'], 0, 1) != '/')
    ) {
        $urlp['path'] = '/' . $urlp['path']; // Добавляем начальный слэш, если путь отсутствует или некорректный
    }
    if (!empty($urlp['path'])) $url .= $urlp['path'];

    // Добавляем параметры запроса (например, ?param=value)
    if (!empty($urlp['query'])) $url .= '?' . $urlp['query'];

    // Добавляем якорь (например, #anchor)
    if (!empty($urlp['fragment'])) $url .= '#' . $urlp['fragment'];

    return $url; // Возвращаем собранный URL
}


Объяснение:
Проверка и обработка порта:

Если порт указан, он преобразуется в целое число:
 
$port = (string)intval($urlp['port']);


Если порт равен 80 (стандартный порт для HTTP) или некорректный, он игнорируется:
 
if ($port && $port != '80' && preg_match('/^\d+$/', $port)) $url .= ':' . $port;


Добавление схемы:

Если указана схема (http, https), она добавляется с ://:
 
if (!empty($urlp['scheme'])) $url .= $urlp['scheme'] . '://';


Добавление данных авторизации:

Если указан пользователь, добавляется логин. Если указан пароль, он включается в строку:
 
if (!empty($urlp['user'])) {
    if (!empty($urlp['pass'])) {
        $url .= $urlp['user'] . ':' . $urlp['pass'] . '@';
    } else {
        $url .= $urlp['user'] . '@';
    }
}


Обработка пути:

Если путь отсутствует, но есть параметры запроса или якорь, путь корректируется:
 
if (
    (empty($urlp['path']) && (!empty($urlp['query']) || !empty($urlp['fragment']))) ||
    (!empty($urlp['path']) && substr($urlp['path'], 0, 1) != '/')
) {
    $urlp['path'] = '/' . $urlp['path'];
}


Добавление остальных частей URL:

Параметры запроса (query) добавляются с префиксом ?.
Якорь (fragment) добавляется с префиксом #.


Пример использования:

Сценарий 1: Простой URL
 
$urlParts = [
    'scheme' => 'https',
    'host' => 'example.com',
    'path' => '/page',
    'query' => 'id=123&name=test',
    'fragment' => 'section1'
];
echo cot_http_build_url($urlParts);


Результат:

https://example.com/page?id=123&name=test#section1


Сценарий 2: URL с данными авторизации
 
$urlParts = [
    'scheme' => 'http',
    'user' => 'admin',
    'pass' => 'password',
    'host' => 'example.com',
    'path' => '/dashboard'
];
echo cot_http_build_url($urlParts);


Результат:

http://admin:[email protected]/dashboard


Сценарий 3: URL с портом
 
$urlParts = [
    'scheme' => 'http',
    'host' => 'example.com',
    'port' => '8080',
    'path' => '/api/data'
];
echo cot_http_build_url($urlParts);


Результат:

http://example.com:8080/api/data


Итог:
Функция cot_http_build_url предназначена для восстановления полного URL из массива частей, что удобно при обработке и модификации URL в фреймворке Cotonti. Она корректно обрабатывает все элементы URL, включая схему, порт, данные авторизации, параметры запроса и якорь.

3 минут чтения Administrator

Комментарии (0)

Комментарии отсутствуют
Добавление комментариев доступно только зарегистрированным пользователям

Автор контента

Administrator

Оффлайн

Administrator

Последняя авторизация: 05.07.2026 18:32

  • Страница размещена: 23.01.2025 23:27
  • Последнее обновление: 23.01.2025 23:27