Функция 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, включая схему, порт, данные авторизации, параметры запроса и якорь.
Комментарии (0)
Автор контента
Оффлайн
Administrator
Последняя авторизация: 05.07.2026 18:32
- Страница размещена: 23.01.2025 23:27
- Последнее обновление: 23.01.2025 23:27