#php #parsing
#php #синтаксический анализ
Вопрос:
У меня есть страница, на которую может быть ссылка в любом из приведенных ниже форматов:
Когда часть запроса URL-адреса присутствует, мне нужно записать ее с помощью PHP. Я пытался использовать parse_url, но я не совсем уверен, как его использовать. Пробовал это
echo (parse_url($_SERVER['REQUEST_URI']['query']));
но он возвращает массив…
Комментарии:
1. Вы можете использовать
http_build_query
с переменной $_GET.2. Ниже представлено много решений, но, к вашему сведению, если вы что-то отлаживаете и получаете «Массив», вам нужно использовать PRINT_R, чтобы увидеть содержимое массива…
Ответ №1:
Вы должны сделать:
$parsed = parse_url($_SERVER['REQUEST_URI']);
echo $parsed['query'];
Редактировать:
Если вам нужна только часть запроса URL-адреса и ничего больше, приведенное ниже решение Salman на самом деле немного приятнее:
echo parse_url($_SERVER['REQUEST_URI'], PHP_URL_QUERY);
Ответ №2:
Необязательный 2-й параметр parse_url
позволяет вам точно указать, какая часть URL-адреса вам нужна:
<?php
echo parse_url("http://mydomain.com/linkID", PHP_URL_QUERY); // <empty string>
echo parse_url("http://mydomain.com/linkID?9c1023a67eaf46cae864a31097", PHP_URL_QUERY); // 9c1023a67eaf46cae864a31097
С другой стороны, проще использовать серверную переменную, если это применимо:
echo isset($_SERVER["QUERY_STRING"]) ? $_SERVER["QUERY_STRING"] : "";
Ответ №3:
$_SERVER['QUERY_STRING'];
Это должно быть все, что вам нужно. См. Переменные $_SERVER
Ответ №4:
parse_url возвращает ассоциативный массив (он же хэш, словарь и т.д.) со следующими ключами:
scheme - e.g. http
host
port
user
pass
path
query - after the question mark ?
fragment - after the hashmark #
который может сломать что-то вроде этого:
scheme user password host port path query fragment
[http]://[santa]:[password]@[www.website.com]:[80]/[page.php]?[var=val]#[anchor]
похоже, вы ищете один из них:
$parsedUrl = parse_url($_SERVER['REQUEST_URI']);
echo $parsedUrl['query'];
echo $_SERVER['query_string'];