Задача: Фрагмент URL. Разберём подробно, чтобы понять, что это такое и как работать с ним.
Что такое фрагмент URL
- Фрагмент — это часть URL, которая идёт после символа #.
- Формально URL имеет вид: схема://хост/путь?параметры#фрагмент
- Фрагмент не отправляется на сервер при запросе — он используется клиентом (браузером) для прокрутки к якорю внутри страницы или для передачи указателя в программе.
- Фрагмент может содержать кодировку символов. Чтобы увидеть читаемый текст, иногда нужно декодировать percent-encoding (например %20 — пробел).
Как найти фрагмент (пошаговый алгоритм)
- Найди первый символ #
- Если его нет — фрагмента нет.
- Если он есть — фрагмент это всё, что идёт после этого первого # (без самого #).
- Обычно в валидном URL после первого # не встречается неэкранированный #; если встречается, он считается частью фрагмента только если он корректно закодирован как %23.
- При необходимости декодируй фрагмент (например, из %7Bid%7D в {id}).
Примеры
example.com Фрагмент: intro
site.org Фрагмент: results
example.com Фрагмента нет (нет символа #)
example.com Фрагмент: пустая строка (empty)
example.com Фрагмент (кодированный): section 3 После декодирования: section 3
Как это может выглядеть в коде (псевдокод)
Поиск фрагмента: функция getFragment(url): если '#' не в url: вернуть null idx = индекс первого '#' fragment = подстрока url после idx+1 вернуть fragment
Декодирование фрагмента: fragmentDecoded = decodePercent(fragment)
Важно помнить
- Фрагмент не отправляется на сервер; он обрабатывается клиентом.
- В HTML-страницах фрагменты часто используются для навигации к якорям внутри документа.
- Для разработки или парсинга URL удобны готовые функции в языках программирования:
- JavaScript: new URL(url).hash возвращает строку начиная с '#'. Чтобы получить сам фрагмент без '#', берём .hash и удаляем первый символ.
- Python: urllib.parse.urlsplit(url).fragment возвращает фрагмент без ведущего '#'.
- Java: new URL(url).getRef() возвращает фрагмент без '#'.
Задачи для самостоятельной практики
Определи фрагмент у URL: openai.com Ответ: getting-started
Определи фрагмент у URL: example.org Ответ: results
Определи фрагмент у URL: example.com Ответ: фрагмента нет
Определи фрагмент у URL: example.com Ответ: пустая строка (empty)
Определи фрагмент у URL: site.org Фрагмент закодированный: %7Bid%7D После декодирования: {id}
Если хочешь, пришли конкретную задачу: URL и требование (найти фрагмент, декодировать, проверить наличие фрагмента и т.д.). Я дам пошаговое решение с пояснениями.