Функция 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 minutes read Administrator

Comments (0)

No comments yet
Only registered users can post new comments

Article multicategories

Additional categories where this article is shown as similar.

Content author

Administrator

Offline

Administrator

Last logged: 2026-09-13 14:50

  • Page published: 2025-01-23 23:27
  • Last update: 2025-01-23 23:27