Создание адресов с опцией option: PHP-методы и решения
Формирование ссылки с параметром option
Основной способ: использование суперглобального массива $_GET и атрибута href
Для передачи параметра option через URL в скрипт index.php применяется конструкция index.php?option=значение. В PHP значение извлекается через $_GET['option']. Пример простейшей ссылки:
<a href="index.php?option=home">Главная</a>ссылка index php option (формирование ссылки с параметром option в index.php)
При переходе по такой ссылке сервер получит запрос GET /index.php?option=home, и в коде можно обработать параметр:
<?php
$option = $_GET['option'] ?? 'default';
echo 'Выбрана опция: ' . htmlspecialchars($option);
?>
Этот подход подходит для простой навигации, где каждая опция соответствует отдельному разделу.
Как создать ссылку с параметром option, если в URL уже есть другие параметры?
Необходимо сохранить существующие GET-параметры и добавить новый. Для этого применяется функция http_build_query().
<?php
$params = $_GET;
$params['option'] = 'contacts';
$url = 'index.php?' . http_build_query($params);
?>
<a href="<?= htmlspecialchars($url) ?>">Контакты</a>
Функция автоматически экранирует значения. Этот вариант удобен при реализации фильтрации или постраничной навигации, когда нужно сохранить состояние.
Как передать параметр option через форму методом GET?
Иногда удобнее использовать форму с кнопками или выпадающим списком.
<form method="get" action="index.php">
<select name="option">
<option value="news">Новости</option>
<option value="about">О нас</option>
</select>
<button type="submit">Перейти</button>
</form>
При отправке формируется URL index.php?option=news. Этот метод подходит для выбора раздела без необходимости вручную редактировать ссылки.
Как обработать параметр option с проверкой безопасности?
Для предотвращения XSS-атак следует фильтровать и экранировать значение. Рекомендуется использовать белый список допустимых опций.
<?php
$allowed = ['home', 'about', 'contacts'];
$option = $_GET['option'] ?? 'home';
if (!in_array($option, $allowed)) {
$option = 'home';
}
?>
Такой подход применяется в системах маршрутизации малого масштаба.
Типичная ошибка: внедрение нежелательных параметров
Если просто конкатенировать строки без экранирования, злоумышленник может добавить дополнительные параметры. Пример уязвимости:
<!-- Опасно: -->
<a href="index.php?option=<?= $_GET['user_input'] ?>">ссылка</a>
Как избежать? Всегда использовать htmlspecialchars() при выводе в атрибут href и urlencode() при построении URL.
<a href="index.php?option=<?= urlencode($option) ?>">
<?= htmlspecialchars($option) ?>
</a>
Другая распространенная проблема – дублирование параметра option при повторном использовании http_build_query() с $_GET, если значение уже было в строке. Решение – перезаписывать ключ.
Расширенные примеры построения ссылок с параметром option
Динамическое формирование ссылок с сохранением всех параметров
Пример функции, которая возвращает URL с новым значением option, сохраняя остальные GET-параметры:
<?php
function getOptionUrl($newOption) {
$params = $_GET;
$params['option'] = $newOption;
return 'index.php?' . http_build_query($params);
}
?>
<a href="<?= getOptionUrl('gallery') ?>">Галерея</a>
Ссылка с параметром option в условной навигации (breadcrumbs)
<?php
$current = $_GET['option'] ?? 'home';
$breadcrumbs = [
'home' => 'Главная',
'catalog' => 'Каталог',
'product' => 'Товар'
];
?>
<nav>
<a href="index.php?option=home">Главная</a>
<?php if ($current != 'home'): ?>
> <span><?= $breadcrumbs[$current] ?? 'Неизвестно' ?></span>
<?php endif; ?>
</nav>
Многоуровневые параметры (опция + подопция)
<?php
$params = ['option' => 'shop', 'sub' => 'phones'];
$url = 'index.php?' . http_build_query($params);
?>
<a href="<?= $url ?>">Телефоны</a>
<!-- Результат: index.php?option=shop&sub=phones -->
Обработка опции с помощью switch без экранирования
<?php
$option = $_GET['option'] ?? 'home';
switch ($option) {
case 'about':
include 'about.php';
break;
case 'contacts':
include 'contacts.php';
break;
default:
include 'home.php';
}
?>
Генерация ссылок для пагинации с сохранением опции
<?php
$page = $_GET['page'] ?? 1;
$option = $_GET['option'] ?? 'list';
$nextPage = $page + 1;
$params = ['option' => $option, 'page' => $nextPage];
$nextUrl = 'index.php?' . http_build_query($params);
?>
<a href="<?= $nextUrl ?>">Следующая страница</a>
Использование массива опций в URL (например, option[])
<?php
// Ссылка с несколькими значениями:
$url = 'index.php?option[]=news&option[]=sport';
// В PHP: $_GET['option'] станет массивом ['news', 'sport']
?>
<a href="<?= $url ?>">Новости и спорт</a>
При переходе по этой ссылке можно обработать массив опций:
<?php
if (isset($_GET['option']) && is_array($_GET['option'])) {
foreach ($_GET['option'] as $opt) {
echo htmlspecialchars($opt) . '<br>';
}
}
?>
Формирование ссылки с проверкой существующего параметра option
<?php
$currentOption = $_GET['option'] ?? null;
$url = 'index.php?' . ($currentOption ? 'option=' . urlencode($currentOption) : '');
?>
<a href="<?= $url ?>">Текущая opция</a>
Результат выполнения функций с экранированием:
// Если $_GET['option'] = 'home &' // urlencode даст: home+++%26 // htmlspecialchars при выводе: home &