Получить часть запроса URL

#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'];