- parse_url
- Список параметров
- Возвращаемые значения
- Список изменений
- Примеры
- Примечания
- Смотрите также
- Работа с параметрами запроса в URL, с примером из реальной практики.
- Параметры запроса
- UTM-метки
- Пример из практики
- Работа с параметрами запроса на сервере (PHP)
- Как получить параметры из строки URL?
- PHP параметр URL (из строки)
parse_url
Эта функция разбирает URL и возвращает ассоциативный массив, содержащий все компоненты URL, которые в нём присутствуют.
Эта функция не предназначена для проверки на корректность данного URL, она только разбивает его на нижеперечисленные части. Частичные URL также принимаются, parse_url() пытается сделать всё возможное, чтобы разобрать их корректно.
Список параметров
URL для разбора. Недопустимые символы будут заменены на знаки подчёркивания _.
Укажите одну из констант PHP_URL_SCHEME , PHP_URL_HOST , PHP_URL_PORT , PHP_URL_USER , PHP_URL_PASS , PHP_URL_PATH , PHP_URL_QUERY или PHP_URL_FRAGMENT , чтобы получить только конкретный компонент URL в виде строки ( string ). Исключением является указание PHP_URL_PORT , в этом случае возвращаемое значение будет типа integer .
Возвращаемые значения
При разборе значительно некорректных URL-адресов parse_url() может вернуть FALSE .
- scheme — например, http
- host
- port
- user
- pass
- path
- query — после знака вопроса ?
- fragment — после знака диеза #
Если параметр component определён, функция parse_url() вернёт строку ( string ) или число ( integer ), в случае PHP_URL_PORT ) вместо массива ( array ). Если запрошенный компонент не существует в данном URL, будет возвращён NULL .
Список изменений
Версия | Описание |
---|---|
5.4.7 | Исправлено распознавание host, если в URL отсутствовал компонент scheme и использовался ведущий разделитель компонентов. |
5.3.3 | Удалено E_WARNING , которое сообщало о невозможности разбора URL. |
5.1.2 | Добавлен параметр component . |
Примеры
Пример #1 Пример использования parse_url()
echo parse_url ( $url , PHP_URL_PATH );
?>
Результат выполнения данного примера:
Array ( [scheme] => http [host] => hostname [user] => username [pass] => password [path] => /path [query] => arg=value [fragment] => anchor ) /path
Пример #2 Пример использования parse_url() при отсутствии протокола
// До 5.4.7 в path выводилось «//www.example.com/path»
var_dump ( parse_url ( $url ));
?>
Результат выполнения данного примера:
array(3) < ["host"]=>string(15) "www.example.com" ["path"]=> string(5) "/path" ["query"]=> string(17) "googleguy=googley" >
Примечания
Замечание:
Эта функция не работает с относительными URL.
Замечание:
Эта функция предназначена специально для разбора URL-адресов, а не URI. Однако, чтобы соответствовать требованиям обратной совместимости PHP, она делает исключение для протокола file://, в которой допускаются тройные слеши (file:///. ). Для любого другого протокола это недопустимо.
Смотрите также
- pathinfo() — Возвращает информацию о пути к файлу
- parse_str() — Разбирает строку в переменные
- http_build_query() — Генерирует URL-кодированную строку запроса
- http_build_url()
- dirname() — Возвращает имя родительского каталога из указанного пути
- basename() — Возвращает последний компонент имени из указанного пути
- » RFC 3986
Работа с параметрами запроса в URL, с примером из реальной практики.
В статье разберем что такое параметры запроса, познакомимся c так называемыми utm-метками, и научимся работать с параметрами запроса на примере одной ситуации из моей практики.
Внимание! Поскольку статья для начинающих веб-разработчиков, многие понятия в статье даются в упрощенном виде для облегчения понимания.
Параметры запроса
Зачастую, кроме адреса страницы сайта, в ссылке требуется передавать какие-то дополнительные параметры.
Представим, что есть каталог товаров в интернет-магазине. В каталоге может быть сотни и тысячи наименований товара, и, если выводить их на одной странице, она получится просто огромной, и будет грузится долгое время.
Всем известен выход из этой ситуации: нужно разбить каталог на страницы. Все вы видели такие страницы, там десять или двадцать товаров, а также ссылки на другие страницы каталога.
Как же сформированы подобные ссылки? Вот здесь-то и используются параметры запроса в URL.
Часто параметры запроса называют GET-параметрами. Это не совсем верно. Да, при запросе методом GET, эти параметры видны в строке браузера, но их с тем же успехом можно передавать и POST-запросом.
https://someshop.ru/catalog/iphone?page=1&perpage=20
- https – это протокол, по которому идет передача данных (в данном случае защищенный http);
- someshop.ru – доменное имя хоста (часто просто говорят «домен»);
- catalog/iphone – так называемый «Путь» до конкретной страницы на сайте, часто бывает иерархическим, при этом составные части пути разделяет прямой слэш /;
- page=1&perpage=20 – строка запроса (как раз состоящая из параметров).
Вот именно строку запроса, в большинстве случаев называют GET-параметрами.
Эта строка состоит из пар имя_параметра=значение_параметра.
Пары разделены между собой амперсандом &.
Строка запроса отделена от адреса (с путем) знаком вопроса ?
В адресе выше мы имеем два параметра запроса:
Они означают, что ссылка ведет на 1-ю страницу каталога, и выводить на странице нужно 20 товаров.
UTM-метки
Одним из распространенных примером применением параметров запроса являются так называемые UTM-метки.
UTM-метки – это, по сути, набор параметров запроса с заданными именами.
Они «де-факто» являются стандартом меток для сбора статистики. Практически все системы аналитики, CRM-системы, многочисленные сервисы из самых разных областей, поддерживают работу с UTM-метками.
- utm_source — источник перехода;
- utm_medium — тип трафика;
- utm_campaign — название рекламной кампании;
- utm_content — дополнительная информация по каналу рекламы;
- utm_term — ключевая фраза.
Пример из практики
Я технически поддерживаю один из обучающих проектов.
Имела место следующая ситуация.
- Есть лендинг тренинга, в котором можно участвовать как платно (с расширенными возможностями), так и бесплатно (базовый вариант).
- На этот лендинг «льется трафик» с различных рекламных систем (яндекс.директ, вконтакте, фэйсбук, партнеры…).
- Все рекламные ссылки на этот лендинг размечены utm-метками.
- В свою очередь CRM-система, используемая на проекте, поддерживает работу с UTM-метками и таким образом можно считать выгоду от того или иного канала рекламы, соотнося расходы и продажи по каждому каналу.
- На лендинге имеются 2 ссылки для платного и бесплатного участия. Ссылка для бесплатного участия ведет на отдельную страницу, где находится форма, заполнив которую, человек попадает в группу в CRM для бесплатного участия в тренинге.
Проблема была в том, что при переходе по ссылке на страницу с формой, UTM-метки туда не передавались, и, соответственно, невозможно было понять по какому каналу рекламы пришел человек, который заполнил эту форму.
Формулируем задачу для решения этой проблемы:
нужно взять UTM-метки из строки запроса лендинга и подставить их в ссылку на страницу с формой.
Сделать это нужно было максимально быстро, т.е. «вчера» поскольку на страницу уже шел трафик.
Работа с параметрами запроса на сервере (PHP)
Задача была решена парой строчек кода на PHP.
Ниже код двух страничек, первая это эмуляция лендинга со ссылкой на эмуляцию страницы с формой, вторая это эмуляция страницы с формой.
Вторая страница нужна, чтобы вы могли скопировать ее посмотреть результат перехода по ссылке с лендинга.
Как получить параметры из строки URL?
У меня есть поле формы HTML $_POST[«url»] , где в качестве значения есть строка URL. Примерами являются:
https://example.com/test/1234?email=xyz@test.com https://example.com/test/1234?basic=2&email=xyz2@test.com https://example.com/test/1234?email=xyz3@test.com https://example.com/test/1234?email=xyz4@test.com&testin=123 https://example.com/test/the-page-here/1234?someurl=key&email=xyz5@test.com
Как я могу получить только параметры email из этих URL-адресов / значений?
Обратите внимание, что я не получаю эти строки из адресной строки браузера.
Вы можете использовать parse_url() и parse_str() для этого.
$parts = parse_url($url); parse_str($parts['query'], $query); echo $query['email'];
Если вы хотите динамически получить $url с PHP, взгляните на этот вопрос:
Получить полный URL-адрес в PHP
Все параметры после ? можно получить, используя массив $_GET . Так,
будет извлекать электронные письма из URL-адресов.
Используйте методы parse_url () и parse_str () . parse_url() будет анализировать строку URL в ассоциативный массив его частей. Поскольку вам нужна только одна часть URL-адреса, вы можете использовать ярлык, чтобы вернуть строковое значение только той части, которую вы хотите. Затем parse_str() создаст переменные для каждого из параметров строки запроса. Мне не нравится загрязнять текущий контекст, поэтому предоставление второго параметра помещает все переменные в ассоциативный массив.
$url = "https://mysite.com/test/1234?email=xyz4@test.com&testin=123"; $query_str = parse_url($url, PHP_URL_QUERY); parse_str($query_str, $query_params); print_r($query_params); //Output: Array ( [email] => xyz4@test.com [testin] => 123 )
Используйте $ _GET [’email’] для параметров в URL. Используйте $ _POST [’email’] для опубликованных данных для скрипта. Или используйте _ $ ЗАПРОС для обоих. Кроме того, как уже упоминалось, вы можете использовать функцию parse_url (), которая возвращает все части URL. Используйте часть под названием «запрос» – там вы можете найти свой параметр электронной почты. Дополнительная информация: http://php.net/manual/en/function.parse-url.php
вы можете использовать ниже код для получения адреса электронной почты после? в URL-адресе
Я создал функцию из ответа @Ruel . Вы можете использовать это:
function get_valueFromStringUrl($url , $parameter_name) < $parts = parse_url($url); if(isset($parts['query'])) < parse_str($parts['query'], $query); if(isset($query[$parameter_name])) < return $query[$parameter_name]; >else < return null; >> else < return null; >>
$url = "https://example.com/test/the-page-here/1234?someurl=key&email=xyz5@test.com"; echo get_valueFromStringUrl($url , "email");
$uri = $_SERVER["REQUEST_URI"]; $uriArray = explode('/', $uri); $page_url = $uriArray[1]; $page_url2 = $uriArray[2]; echo $page_url;
Это работает Grate для меня, используя php
Вы можете получить параметры URL-адреса:
$url = $_SERVER["REQUEST_URI"]; $email = str_replace("/path/to/file.php?email=", "", $url);
если URL-адрес выглядит так:
/file.php (+ parameter to get. Example: ?email=)
вы можете использовать filter_input () см. руководство по php
PHP параметр URL (из строки)
GET параметры текущей страницы хранятся в массиве $_GET. Но как получить параметры URL из строковой переменной? Для этого необходимо использовать сочетание PHP функций parse_url и parse_str.
Предположим, что необходимо получить значение переменной login из такой строки:
Скрипт будет выглядеть так:
$url = 'https://www.alexgur.ru/a/?email=mail&login=alex&action=y';
$parts = parse_url( $url );
parse_str( $parts['query'] , $query );
echo $query['login'];
Разберём подробнее, что делают функции
parse_url - разбирает URL и возвращает его компоненты. Для нашего запроса parse_url вернёт такой массив:
Array
[scheme] => https
(
[host] => www.alexgur.ru
[path] => /a/
[query] => email=mail&login=alex&action=y)
Из результата работы функции parse_url нам интересены только параметры, которые находятся в ['query']. Но они записаны в одну строку. Поэтому придётся разбить эту строку на составляющие. В этом поможет функция parse_str.
После получения строки с параметрами необходимо разбить её на части. Для этого пригодится функция parse_str. Первым её параметром стоит строка, из которой надо достать переменные. Во втором параметре стоит переменная, куда будет передан результат работы функции. Поэтому
присвоит переменной $query следующие значения:
Остаётся только выбрать нужный элемент массива, чтобы вывести значение: