Анализ URL-запроса в PHP

Предполагая URL-адрес www.domain.org?x=1&y=2&z=3 , что было бы разумным методом для выделения элементов запроса URL-адреса в php без использования GET или REQUEST?

  $url = parse_url($url); echo $url[fragment]; 

Я не думаю, что можно вернуть части запроса отдельно? Из того, что я могу сказать, запрос просто скажет x=1&y=2&z=3 но, пожалуйста, дайте мне знать, если я ошибаюсь. В противном случае, что бы вы сделали, чтобы проанализировать $url[query] ?

Изменить: Фрагмент должен быть запрошен. Извините за путаницу, я учусь!

Вы можете сделать второй шаг и проанализировать строку запроса, используя parse_str .

 $url = 'www.domain.org?x=1&y=2&z=3'; $url_parts = parse_url($url); parse_str($url_parts['query'], $query_parts); var_dump($query_parts); 

Я предположил, что вы использовали строку запроса вместо фрагмента, потому что для фрагментов нет стандартного шаблона.

Функция parse_url возвращает несколько компонентов, включая query . Для его анализа вы должны запустить parse_str .

 $parsedUrl = parse_url($url); $parsedQueryString = parse_str($result['query']); 

Если вы собираетесь просто проанализировать URL-адрес вашего HTTP-запроса:

  • используйте $_REQUEST['x'] , $_REQUEST['y'] , $_REQUEST['z'] для доступа к параметрам x, y, z;

  • используйте $_SERVER['QUERY_STRING'] чтобы получить целую цепочку URL-адресов.

Я получил ошибки с некоторыми из ответов выше, но они привели меня к правильному ответу. Спасибо, парни.

  $url = 'www.domain.org?x=1&y=2&z=3'; $query = $url[query]; parse_str($query); echo "$x &y $z"; 

И этот результат: 1 2 3 , что я и пытался выяснить.

Как один вкладыш без проверки ошибок

 parse_str(parse_url($_SERVER['REQUEST_URI'], PHP_URL_QUERY), $query); 

$query будет содержать параметры строки запроса
в отличие от PHP $_GET , это будет работать с параметрами запроса любой длины

Я настоятельно рекомендую использовать эту url-обертку https://github.com/weew/url (которую я написал)

Он способен анализировать URL-адреса сложности, такие как protocol://username:password@subdomain.domain.tld:80/some/path?query=value#fragment и имеет много других полезных свойств .