PHP, чтобы проверить, содержит ли URL строку запроса

Это легко. Кажется, есть много решений, чтобы определить, содержит ли URL определенный ключ или значение, но, как ни странно, я не могу найти решение для определения того, действительно ли у URL-адреса есть или нет запроса.

Используя PHP, я просто хочу проверить, имеет ли текущий URL-адрес строку запроса. Например: http://abc.com/xyz/?key=value VS. http://abc.com/xyz/.

Ответ 1

Для любого URL-адреса в виде строки:

if (parse_url($url, PHP_URL_QUERY))

http://php.net/parse_url

Если для URL-адреса текущего запроса просто:

if ($_GET)

Ответ 2

Самый простой способ - проверить, действительно ли $_GET[] содержит что-либо. Это можно сделать с помощью функции empty() следующим образом:

if(empty($_GET)) {
    //No variables are specified in the URL.
    //Do stuff accordingly
    echo "No variables specified in URL...";
} else {
    //Variables are present. Do stuff:
    echo "Hey! Here are all the variables in the URL!\n";
    print_r($_GET);
}

Ответ 3

Вот так:

if (isset($_SERVER['QUERY_STRING'])) {

}

Ответ 4

parse_url в большинстве случаев кажется логичным выбором. Однако я не могу придумать случай, где "?" в URL-адресе не будет означать начало строки запроса, поэтому для (очень незначительного) повышения производительности вы можете пойти с

return strpos($url, '?') !== false;

Более 1 000 000 итераций среднее время для strpos было около 1,6 секунды против 1,8 для parse_url. При этом, если ваше приложение не проверяет миллионы URL-адресов для строк запроса, я бы пошел на parse_url.