Как получить параметры из строки URL?

У меня есть поле формы HTML $_POST["url"], в котором значение имеет значение в строке URL. Примерами являются:

https://example.com/test/[email protected]
https://example.com/test/1234?basic=2&[email protected]
https://example.com/test/[email protected]
https://example.com/test/[email protected]&testin=123
https://example.com/test/the-page-here/1234?someurl=key&[email protected]

и др.

Как я могу получить только параметр email из этих URL-адресов/значений?

Обратите внимание, что я не получаю эти строки из адресной строки браузера.

Ответ 1

Вы можете использовать parse_url() и parse_str() для этого.

$parts = parse_url($url);
parse_str($parts['query'], $query);
echo $query['email'];

Если вы хотите динамически получать $url с помощью PHP, посмотрите на этот вопрос:

Получить полный URL-адрес в PHP

Ответ 2

Все параметры после ? можно получить с помощью массива $_GET. Таким образом,

echo $_GET['email'];

будет извлекать письма из URL-адресов.

Ответ 3

Используйте parse_url() и parse_str() методы. parse_url() будет анализировать строку URL в ассоциативный массив его частей. Поскольку вам нужна только одна часть URL-адреса, вы можете использовать ярлык, чтобы вернуть строковое значение только той части, которую вы хотите. Затем parse_str() создаст переменные для каждого из параметров строки запроса. Мне не нравится загрязнение текущего контекста, поэтому предоставление второго параметра помещает все переменные в ассоциативный массив.

$url = "https://mysite.com/test/[email protected]&testin=123";
$query_str = parse_url($url, PHP_URL_QUERY);
parse_str($query_str, $query_params);
print_r($query_params);

//Output: Array ( [email] => [email protected] [testin] => 123 ) 

Ответ 4

Используйте $_GET['email'] для параметров в URL. Используйте $_POST['email'] для отправки данных в скрипт. Или используйте _$REQUEST для обоих. Также, как уже упоминалось, вы можете использовать parse_url() которая возвращает все части URL. Используйте часть под названием "запрос" - там вы можете найти свой параметр электронной почты. Больше информации: http://php.net/manual/en/function.parse-url.php

Ответ 5

вы можете использовать ниже код для получения адреса электронной почты после? в URL

<?php
if (isset($_GET['email'])) {
    echo $_GET['email'];
}

Ответ 6

Как уже упоминалось в другом ответе, лучшее решение использует

parse_url()

Вам нужно использовать комбинацию parse_url() и parse_str().

parse_url() анализирует URL и возвращает его компоненты, которые вы можете получить с помощью ключа query. Затем вы должны использовать parse_str() который анализирует строку запроса и возвращает значения в переменную.

$url = "https://example.com/test/1234?basic=2&[email protected]";
parse_str(parse_url($url)['query'], $params);
echo $params['email']; // [email protected]

Также вы можете сделать эту работу с помощью регулярных выражений.

preg_match()

Вы можете использовать preg_match() чтобы получить конкретное значение строки запроса из URL.

preg_match("/&?email=([^&]+)/", $url, $matches);
echo $matches[1]; // [email protected]

preg_replace()

Также вы можете использовать preg_replace() для выполнения этой работы в одну строку!

$email = preg_replace("/^https?:\/\/.*\?.*email=([^&]+).*$/", "$1", $url);
// [email protected]

Ответ 7

Я создал функцию из ответа @Ruel. Вы можете использовать это:

function get_valueFromStringUrl($url , $parameter_name)
{
    $parts = parse_url($url);
    if(isset($parts['query']))
    {
        parse_str($parts['query'], $query);
        if(isset($query[$parameter_name]))
        {
            return $query[$parameter_name];
        }
        else
        {
            return null;
        }
    }
    else
    {
        return null;
    }
}

Пример:

$url = "https://example.com/test/the-page-here/1234?someurl=key&[email protected]";
echo get_valueFromStringUrl($url , "email");

Благодаря @Ruel

Ответ 8

Вы можете получить параметры url следующим образом:

email = $_GET["email"];

.. или вот так:

$url = $_SERVER["REQUEST_URI"];
$email = str_replace("/path/to/file.php?email=", "", $url);

Примеры пути к файлу:

если URL-адрес выглядит следующим образом:

https://example.com/file.php

тогда путь к файлу:

/file.php (+ parameter to get. Example: ?email=)

Ответ 9

$uri = $_SERVER["REQUEST_URI"];
$uriArray = explode('/', $uri);
$page_url = $uriArray[1];
$page_url2 = $uriArray[2];
echo $page_url; <- see the value

Это прекрасно работает для меня с помощью PHP

Ответ 10

$web_url = 'http://www.writephponline.com?name=shubham&[email protected]';
$query = parse_url($web_url, PHP_URL_QUERY);
parse_str($query, $queryArray);

echo "Name: " . $queryArray['name'];  // Result: shubham
echo "EMail: " . $queryArray['email']; // Result:[email protected]

Ответ 11

В Laravel я использую:

private function getValueFromString(string $string, string $key)
{
    parse_str(parse_url($string, PHP_URL_QUERY), $result);

    return isset($result[$key]) ? $result[$key] : null;
}

Ответ 12

Динамическая функция, которая анализирует строку URL и получает значение параметра запроса, переданного в URL

 function getParamFromUrl($url,$paramName){
   parse_str(parse_url($url,PHP_URL_QUERY),$op);// fetch query parameters from string and convert to associative array
   return array_key_exists($paramName,$op) ? $op[$paramName] : "Not Found"; // check key is exist in this array
 }

Вызовите функцию, чтобы получить результат

 echo getParamFromUrl('https://google.co.in?name=james&surname=bond','surname'); // bond will be o/p here

Ответ 13

вы можете использовать filter_input() см. руководство по php

Ответ 14

Чтобы получить параметры из строки URL, я использовал следующую функцию.

var getUrlParameter = function getUrlParameter(sParam) {
    var sPageURL = decodeURIComponent(window.location.search.substring(1)),
        sURLVariables = sPageURL.split('&'),
        sParameterName,
        i;

    for (i = 0; i < sURLVariables.length; i++) {
        sParameterName = sURLVariables[i].split('=');

        if (sParameterName[0] === sParam) {
            return sParameterName[1] === undefined ? true : sParameterName[1];
        }
    }
};
var email = getUrlParameter('email');

Если строк URL много, то вы можете использовать цикл, чтобы получить параметр 'email' из всех этих строк URL и сохранить их в массиве.