PHP: Как разбить URL
Как получить элементы URL-адреса и любые связанные параметры?
Могут появиться два случая: либо URL находится в строке символа и хочется найти его элементы, либо это веб-скрипт, запущенный для обработки данных формы методом POST, из которого хочется извлечь данные.
1) Использование функции parse_url
При разборе URL в строке пригодятся две функции: parse_url и parse_str. Первый разбивает URL на такие элементы, как Location в JavaScript, второй разбивает строку параметров на переменные и значения.Сравнение с JavaScript
Функция parse_url в эквивалент объекта Location в JavaScript. Ключи ассоциативной таблицы заменяются свойствами объекта «Расположение».
Полный URL-адрес получается с константой __ FILE __ которая является глобальной и не принадлежит таблице, созданной parse_url.
Данные |
PHP
|
JavaScript
|
Полный URL-адрес |
__ ФАЙЛ __
|
location .href
|
Протокол (http) |
структура
|
протокол
|
Область |
host
|
hostname
|
Каталог и файл |
путь
|
pathname
|
Привязка к странице |
фрагмент
|
хэш
|
Параметры |
query
|
поиск
|
Порт |
-
|
порт
|
Логин |
пользоваться
|
-
|
Пароль |
пропуск
|
-
|
Другие различия:
- Если добавить как внутренний якорь, так и параметры, что неправильно, набор будет связан с хэшем в JavaScript и запросом в PHP. В
- JavaScript протокол включает обе точки, как в http: но не в PHP.
Использование функции parse_url
Пример:
$url = "https://www.iqlevsha.ru/comment/parser-url.php#content";
$arr = parse_url($url)
print_r($arr);
Получится ассоциативная таблица, где ключи подробно описаны в предыдущей таблице.
array(
"scheme" => http,
"host" => www.iqlevsha.ru,
"path" => /comment/parser-url.php,
"fragment" => content
)
Использование функции parse_str
Пример:
$parameters = $arr["query"];
parse_str($parameters, $data);
print_r($data);
$ data - ассоциативный массив, где ключами являются переменные, переданные в параметры, и значения, содержимое этих переменных.
Например:
fichier.php?nom=untel&numero=50
Сформированная таблица будет:
array(
"nom" => untel,
"numero" => 50
)
Исходники и загрузка
- Исходный код онлайн-сценария.
- Исходный код локального сценария.
- Архив, содержащий исходники и демонстрационную страницу.
2) Использование переменной $ _ SERVER
Во второй части показано, как получить ту же информацию с помощью предустановленной переменной $ _ SERVER и, в частности, получить данные формы для перехода на PHP-сценарий.
Сравнение с parse_url
Данные о сценарии или странице PHP получают с помощью предустановленной переменной $ _ SERVER и списка ключей, соответствующих найденной информации, которые приведены в таблице ниже.
Уточним, что имя домена присваивается непосредственно пользователем. На нашем примере это www.example.com.
Данные | parse_url |
Ключи для $ _ SERVER |
Полный URL-адрес | __ ФАЙЛ __ |
домен + REQUEST_URI |
Протокол | структура |
SERVER_PROTOCOL |
Область | host |
константа пользователя |
Каталог и файл | путь |
SCRIPT_NAME |
Привязка к странице | фрагмент |
- |
Параметры | query |
QUERY_STRING |
Порт | - |
- |
Логин | пользоваться |
Трактуется отдельно |
Пароль | пропуск |
Трактуется отдельно |
Различия:
- Функция parse_url предоставляет общее имя протокола, а системная переменная - версию, например, в форме HTTP/1.1.
Использование предустановленной переменной
Пример:
$protocol = $_SERVER[SERVER_PROTOCOL];
Список ключей представлен в руководстве PHP в разделе: «Предопределенные переменные».
Получение данных из HTML-формы
Пример:
$parameters = $_SERVER[QUERY_STRING];
parse_str($parameters, $data);
print_r($data);
$ data - ассоциативный массив, где ключами являются переменные, переданные в параметры, и значения, содержимое этих переменных.
Подробности см. в первой части статьи.